저는 Java 초보자입니다. Java에서 정렬 된 목록을 유지하는 데 사용할 수있는 모음을 제안하십시오. 나는 시도 Map
하고 Set
, 그러나 그들은 내가 찾던하지 무엇을했다.
답변
이것은 매우 늦지 만 JDK에는 정렬 된 목록을 가질 목적으로 클래스가 있습니다. 이름이 (다른 Sorted*
인터페이스 와 순서가 맞지 않음) ” java.util.PriorityQueue
“입니다. 을 Comparable<?>
사용 하거나을 사용하여 정렬 할 수 있습니다 Comparator
.
List
정렬 된 사용법 과의 차이점 Collections.sort(...)
은 힙 데이터 구조를 사용하여 O (log (n)) 삽입 성능을 사용하여 항상 부분 순서를 유지하지만 정렬 된 삽입은 ArrayList
O (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을 사용하십시오 .