다음과 같은 코드 스 니펫을 보았습니다.
Set<Record> instances = new HashSet<Record>();
Hashset이 특별한 종류의 세트인지 궁금합니다. 그들 사이에 어떤 차이가 있습니까?
답변
A Set
는 일반적인 “값 집합”을 나타냅니다. A TreeSet
는 요소가 정렬되어 정렬 HashSet
된 집합이고 , a 는 요소가 정렬되거나 정렬 되지 않은 집합 입니다.
A HashSet
는 일반적으로 TreeSet
.
A는 TreeSet
일반적으로 레드 – 블랙 트리로 구현된다 (참조 http://en.wikipedia.org/wiki/Red-black_tree – 나는 일 / 오라클의 실제 구현을 검증 된 적이 없다 TreeSet
)하는 반면 HashSet
용도가 Object.hashCode()
에서 인덱스를 만들 배열. 레드-블랙 트리에 O(log(n))
대한 액세스 시간 HashSet
은 일정한 시간에서 선형 검색 시간을 가질 수있는 최악의 경우 (모든 항목이 동일한 hashCode를 가짐)에 이르는 범위에 대한 액세스 시간입니다 O(n)
.
답변
답변
질문에 대한 답변이 있었지만 코드가 동일한 코드에서 두 유형을 모두 언급하는 이유에 대한 답변을 보지 못했습니다.
일반적으로이 경우에는 Set 인 인터페이스에 대해 코딩하려고합니다. 왜? 항상 인터페이스를 통해 객체를 참조하는 경우 (new HashSet () 제외) 나중에 코드에서 한 번만 언급했기 때문에 객체의 구현을 변경하는 것이 더 낫다는 것을 알게되면 간단합니다. base (new HashSet ()를 한 곳).
답변
집합 은 중복 요소가없는 컬렉션입니다. 세트는 인터페이스입니다.
HashSetSet
은 해시 테이블 (실제로는 HashMap
인스턴스)에 의해 지원되는 인터페이스를 구현합니다 .
이후는 HashSet
특정 구현이다 Set
인터페이스.
A Set
는 아래 클래스에서 구현되었으므로 다음 중 하나 일 수 있습니다.
ConcurrentSkipListSet : 확장 가능한 동시 NavigableSet 구현입니다 ConcurrentSkipListMap
. 집합의 요소 Comparator
는 사용되는 생성자에 따라 자연 순서에 따라 또는 집합 생성시 제공된에 따라 정렬 됩니다.
CopyOnWriteArraySet : 모든 작업에 내부 CopyOnWriteArrayList를 사용하는 Set입니다.
EnumSet : enum 유형과 함께 사용하기위한 특수 Set 구현입니다. 열거 형 집합의 모든 요소는 집합을 만들 때 명시 적으로 또는 암시 적으로 지정된 단일 열거 형 유형에서 가져와야합니다.
TreeSet : TreeMap에 기반한 NavigableSet 구현입니다. 요소는 사용되는 생성자에 따라 자연 순서를 사용하거나 설정된 생성 시간에 제공된 비교기를 사용하여 정렬됩니다.
LinkedHashSet : 예측 가능한 반복 순서와 함께 Set 인터페이스의 ash 테이블 및 연결 목록 구현. 이 구현은 모든 항목을 통해 실행되는 이중 연결 목록을 유지한다는 점에서 HashSet과 다릅니다.
그러나 하위 클래스 이후 HashSet
에만 가능LinkedHashSet
LinkedHashSet
HashSet
답변
Set는 집합과 유사한 컬렉션에 대한 일반적인 인터페이스이며 HashSet은 Set 인터페이스의 특정 구현입니다 (해시 코드를 사용하므로 이름).
답변
Set는 TreeSet, LinkedHashSet 등과 같은 모든 집합 클래스의 부모 인터페이스입니다.
HashSet은 Set 인터페이스를 구현하는 클래스입니다.
답변
HashSet은 Set 인터페이스에서 파생 된 클래스입니다. Set의 파생 클래스로서 HashSet은 Set의 속성을 얻습니다. 중요하고 가장 자주 사용되는 Set 파생 클래스는 HashSet 및 TreeSet입니다.
