HashSet과 Set의 차이점은 무엇입니까?


답변:


101

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).


또한 다음과 같은 범용 구현이 있습니다. LinkedHashSet (반복자에 대한 일부 순서를 유지하는 HashSet의 변형), ConcurrentSkipListSet (Threadsave SortedSet 구현), CopyOnWriteArraySet ( "많은 읽기, 매우 드물게 최적화 된 스레드 안전 변형) writes "), EnumSet (요소의 열거 형 유형에서만 작동하지만 HashSet보다 더 빠름).
Paŭlo Ebermann

7
@Erik : 답변 수정을 요청합니다. TreeSet은 정렬되지 않고 정렬됩니다. HashSet = 정렬되지 않음, TreeSet = 정렬 됨, LinkedHashSet = 정렬 됨. 이에 따라 답변을 수정하십시오
라이스 알람

hashCode 구현이
나쁘면 Hashset

35

HashSet의 구현입니다 Set.


14
이 댓글을 이해할 수 없습니다. 질문은 "그 사이의 관계"가 아니라 "차이가 무엇인가"입니다.
jambox

8
그는 차이점을 설명했습니다. Set은 인터페이스이고 HashSet은 해당 인터페이스의 구현입니다. 따라서 그들은 다른 구현이 아닙니다. 단순히 HashSet는 Set의 구현 중 하나입니다 (다른 구현은 TreeSet).
AggieDev

나에게 올바른 대답 같은 소리
로맹 Hautefeuille

3
질문에 전혀 답변하지 않았기 때문에 반대표를 남겼습니다. 앞으로 몇 가지 문서, 예제 및 비교를 추가하는 것이 좋습니다. 한 문장 만 작성하고 대부분의 콘텐츠는 다른 곳으로 연결되는 링크 일뿐 Stack Overflow에서 질문에 답하는 방식 이 아닙니다 .
Urda

이 질문은 6 년 전에 답변되었지만 (위 참조) 감사합니다.
vaugham

16

질문에 대한 답변이 있었지만 코드가 동일한 코드에서 두 유형을 모두 언급하는 이유에 대한 답변을 보지 못했습니다.

일반적으로이 경우에는 Set 인 인터페이스에 대해 코딩하려고합니다. 왜? 항상 인터페이스를 통해 객체를 참조하는 경우 (new HashSet () 제외) 나중에 코드에서 한 번만 언급했기 때문에 객체의 구현을 변경하는 것이 더 낫다는 것을 알게되면 간단합니다. base (new HashSet ()를 한 곳).


14

집합 은 중복 요소가없는 컬렉션입니다. 세트는 인터페이스입니다.

HashSetSet 은 해시 테이블 (실제로는 HashMap인스턴스)에 의해 지원되는 인터페이스를 구현합니다 .

이후는 HashSet특정 구현이다 Set인터페이스.

A Set는 아래 클래스에서 구현되었으므로 다음 중 하나 일 수 있습니다.

ConcurrentSkipListSet : 확장 가능한 동시 NavigableSet 구현입니다 ConcurrentSkipListMap. 집합의 요소 Comparator는 사용되는 생성자에 따라 자연 순서에 따라 또는 집합 생성시 제공된에 따라 정렬 됩니다.

CopyOnWriteArraySet : 모든 작업에 내부 CopyOnWriteArrayList를 사용하는 Set입니다.

EnumSet : enum 유형과 함께 사용하기위한 특수 Set 구현입니다. 열거 형 집합의 모든 요소는 집합을 만들 때 명시 적으로 또는 암시 적으로 지정된 단일 열거 형 유형에서 가져와야합니다.

TreeSet : TreeMap에 기반한 NavigableSet 구현입니다. 요소는 사용되는 생성자에 따라 자연 순서를 사용하거나 설정된 생성 시간에 제공된 비교기를 사용하여 정렬됩니다.

LinkedHashSet : 예측 가능한 반복 순서와 함께 Set 인터페이스의 ash 테이블 및 연결 목록 구현. 이 구현은 모든 항목을 통해 실행되는 이중 연결 목록을 유지한다는 점에서 HashSet과 다릅니다.

그러나 하위 클래스 이후 HashSet에만 가능LinkedHashSetLinkedHashSetHashSet


8

Set는 집합과 유사한 컬렉션에 대한 일반적인 인터페이스이며 HashSet은 Set 인터페이스의 특정 구현입니다 (해시 코드를 사용하므로 이름).


2

Set는 TreeSet, LinkedHashSet 등과 같은 모든 집합 클래스의 부모 인터페이스입니다.

HashSet은 Set 인터페이스를 구현하는 클래스입니다.


0

HashSet은 Set 인터페이스에서 파생 된 클래스입니다. Set의 파생 클래스로서 HashSet은 Set의 속성을 얻습니다. 중요하고 가장 자주 사용되는 Set 파생 클래스는 HashSet 및 TreeSet입니다.


-1

**

  • 세트:

** LIST 및 QUEUE와 마찬가지로 Collection 인터페이스의 하위 유형 인 인터페이스입니다.

Set은 3 개 이하의 하위 클래스를 가지고 있으며 중복없이 여러 객체를 저장하는 데 사용됩니다.

  1. HashSet
  2. LinkedHashSet
  3. TreeSet (SortedSet 인터페이스를 구현 함)

**

  • HashSet :

**

하나의 NULL 값 (복제 불가)을 사용할 수 있으며, 데이터는 시퀀스를 유지하지 않으므로 무작위로 저장됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.