[java] Java에서 정렬 된 컬렉션

저는 Java 초보자입니다. Java에서 정렬 된 목록을 유지하는 데 사용할 수있는 모음을 제안하십시오. 나는 시도 Map하고 Set, 그러나 그들은 내가 찾던하지 무엇을했다.



답변

이것은 매우 늦지 만 JDK에는 정렬 된 목록을 가질 목적으로 클래스가 있습니다. 이름이 (다른 Sorted*인터페이스 와 순서가 맞지 않음) ” java.util.PriorityQueue“입니다. 을 Comparable<?>사용 하거나을 사용하여 정렬 할 수 있습니다 Comparator.

List정렬 된 사용법 과의 차이점 Collections.sort(...)은 힙 데이터 구조를 사용하여 O (log (n)) 삽입 성능을 사용하여 항상 부분 순서를 유지하지만 정렬 된 삽입은 ArrayListO (n)입니다 (즉, 이진 검색 및 이동 사용).

그러나, 달리 List, PriorityQueue인덱스 액세스 (지원하지 않습니다 get(5)), 한 번에 힙이 그들을 걸릴 것입니다에 항목에 액세스 할 수있는 유일한 방법은, 하나의 (따라서 이름을 PriorityQueue).


답변

TreeMap과 TreeSet은 내용을 정렬 된 순서로 반복합니다. 또는 ArrayList를 사용하고 Collections.sort ()를 사용하여 정렬 할 수 있습니다. 모든 클래스는 java.util에 있습니다.


답변

자주 수정 하는 정렬 된 목록 을 유지 하려면 (즉, 정렬 외에도 중복을 허용하고 인덱스로 요소를 효율적으로 참조 할 수있는 구조), ArrayList를 사용하지만 요소를 삽입해야 할 때 지정된 요소를 추가 할 색인을 결정하려면 항상 Collections.binarySearch ()를 사용하십시오 . 후자의 방법은 목록을 정렬 된 순서로 유지하기 위해 삽입해야하는 색인을 알려줍니다.


답변

Google Guava의 TreeMultiset 클래스를 사용하십시오 . 구아바 에는 화려한 컬렉션 API가 있습니다.

정렬 순서를 유지하는 List 구현을 제공하는 데있어 한 가지 문제점은 add()메소드 의 JavaDoc에서 작성된 약속 입니다.


답변

당신은 원하는 SortedSet의의 구현, 즉 TreeSet의를 .


답변

몇 가지 옵션이 있습니다. 중복을 원하지 않고 삽입하는 객체가 비슷한 경우 TreeSet을 제안합니다.

Collections 클래스의 정적 메소드를 사용하여이를 수행 할 수도 있습니다.

자세한 정보는 Collections # sort (java.util.List)TreeSet 를 참조하십시오.


답변

목록을 정렬하려면 모든 종류의 List 를 사용하고 Collections.sort ()를 사용하십시오 . 목록의 요소가 고유하고 항상 정렬되도록하려면 SortedSet을 사용하십시오 .