답변:
Set
인터페이스는 어떤 순서 보증을 제공하지 않습니다.
하위 인터페이스 SortedSet
는 일부 기준에 따라 정렬 된 세트를 나타냅니다. Java 6에는 구현하는 두 개의 표준 컨테이너가 있습니다 SortedSet
. 그들은이다 TreeSet
와 ConcurrentSkipListSet
.
SortedSet
인터페이스 외에도 LinkedHashSet
클래스도 있습니다. 요소가 세트에 삽입 된 순서를 기억하고 해당 순서대로 요소를 리턴합니다.
LinkedHashSet 이 필요합니다.
List
는 Set
(회원 자격의 고유성을 보장하지는 않습니다)가 아닙니다.
많은 회원들이 제안한 것처럼 LinkedHashSet 을 사용 하여 컬렉션의 순서를 유지합니다. U는이 구현을 사용하여 세트를 포장 할 수 있습니다.
SortedSet 구현은 정렬 순서에 사용할 수 있지만 목적에 따라 LinkedHashSet을 사용하십시오 .
또한 문서에서
"이 구현은 TreeSet과 관련된 비용 증가없이 HashSet에서 제공하는 지정되지 않은 일반적으로 혼란스러운 순서에서 클라이언트를 보호합니다. 원본과 상관없이 원본과 동일한 순서의 세트 사본을 생성하는 데 사용할 수 있습니다. 세트의 구현 : "
출처 : http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html
다음은 Set
Java에서 사용 가능한 표준 구현 의 순서 특성에 대한 간략한 요약입니다 .
특정한 경우에는 먼저 항목을 정렬 한 다음 1 또는 2 (대부분은 LinkedHashSet
또는 TreeSet
)를 사용할 수 있습니다. 또는 더 효율적으로 또는 더 효율적으로 정렬되지 않은 데이터를 추가 TreeSet
하여 자동으로 정렬을 처리 할 수 있습니다.
주문 사용을 유지하려면 List
또는 LinkedHashSet
.
LinkedHashSet
아니고 ... Map
.
LinkedHashSet은 모든 요소에서 이중 연결 List를 유지 관리하는 HashSet의 정렬 버전입니다. 반복 순서를 염려 할 때 HashSet 대신이 클래스를 사용하십시오.
일반적으로 set은 긴급 성을 신속하게 찾기 위해 HashSet과 같은 순서를 유지하지 않지만 LinkedHashSet을 시도하면 넣은 순서를 유지합니다.
Set에 의해 리턴 된 반복자는 순서대로 데이터를 리턴한다고 가정하지 않습니다. 동일한 콜렉션에 대한 두 개의 java.util.Iterator를 참조하십시오 . 동일한 순서로 요소를 리턴해야합니까?