"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java에서 HashSet과 TreeSet의 주요 주요 차이점

Java에서 HashSet과 TreeSet의 주요 주요 차이점

2024-11-05에 게시됨
검색:513

Top Key Differences Between HashSet and TreeSet in Java

1. HashSet 및 TreeSet 개요

차이점을 살펴보기 전에 HashSet과 TreeSet이 무엇인지 간략하게 살펴보겠습니다.

1.1 HashSet이란 무엇입니까?

HashSet은 해시 테이블을 저장용으로 사용하는 컬렉션입니다. Set 인터페이스를 구현합니다. 즉, 중복 요소를 허용하지 않습니다. 요소는 순서가 없고 정렬되지 않으므로 HashSet은 빠른 조회, 삽입 및 삭제가 필요한 시나리오에 적합합니다.

1.2 트리세트란 무엇인가?

TreeSet은 NavigableSet 인터페이스를 구현하는 컬렉션입니다. 저장을 위해 Red-Black 트리를 사용합니다. 즉, 요소가 정렬되고 정렬된 방식으로 저장됩니다. TreeSet은 중복 요소도 허용하지 않지만 요소의 자연스러운 순서를 유지해야 하는 상황에 이상적입니다.

2. HashSet과 TreeSet의 주요 차이점

2.1 주문

  • HashSet : 요소의 순서를 유지하지 않습니다. 요소가 추가되는 순서는 요소가 저장되는 순서와 상관 관계가 없습니다.
  • TreeSet : 자연 순서 또는 지정된 비교기에 따라 요소를 자동으로 정렬합니다.

2.2 성능

  • HashSet : 추가, 제거, 포함과 같은 기본 작업에 대해 일정한 시간 복잡도 O(1)을 제공하여 주문이 문제가 되지 않을 때 훨씬 더 빠르게 만듭니다.
  • TreeSet : 요소가 트리 구조에 저장되므로 해시 기반 구조보다 시간이 더 오래 걸리기 때문에 기본 작업에 log(n) 시간 복잡성을 제공합니다.

2.3 내부 저장 메커니즘

HashSet : 내부적으로 해시 테이블을 사용합니다. 각 요소의 해시 코드는 저장 위치를 ​​결정하는 데 사용됩니다. 두 요소의 해시 코드가 동일한 경우 체인 또는 프로빙이라는 기술을 사용하여 충돌을 처리합니다.

예제 코드:

Set hashSet = new HashSet();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Mango");

TreeSet : 내부적으로 Red-Black 트리를 사용합니다. 각 요소는 자연 순서 또는 제공된 비교기에 따라 배치되어 트리의 균형이 유지되도록 합니다.

예제 코드:

Set treeSet = new TreeSet();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Mango");

2.4 널 요소

  • HashSet : null 값을 해시할 수 있으므로 하나의 null 요소를 허용합니다.
  • TreeSet : 정렬을 위해 요소를 비교해야 하기 때문에 null 요소를 허용하지 않으며, null을 임의의 객체와 비교하면 NullPointerException이 발생합니다.

2.5 동기화

  • HashSet : 기본적으로 동기화되지 않지만 Collections.synchronizedSet.
  • 를 사용하여 동기화할 수 있습니다.
  • TreeSet : 기본적으로 동기화되지 않지만 동일한 방식으로 동기화할 수 있습니다.

2.6 중복 요소

HashSetTreeSet 모두 중복 요소를 허용하지 않습니다. 그러나 중복을 감지하는 방법은 다릅니다. HashSethashCode () 및 equals () 메소드를 사용하는 반면, TreeSet은 compareTo () 또는 Comparator[를 사용합니다. &&&].

2.7 메모리 사용량

  • HashSet : 일반적으로 기본 해시 테이블과 연결된 목록의 충돌 처리 가능성으로 인해 더 많은 메모리가 필요합니다.
  • TreeSet : 트리 구조를 사용하므로 메모리를 덜 사용하지만 순서를 유지하는 데 더 많은 오버헤드가 발생합니다.
2.8 LinkedHashSet과의 비교

HashSetLinkedHashSet : HashSet는 순서를 보장하지 않지만 LinkedHashSet는 삽입 순서를 유지합니다. 반면에 TreeSet 는 요소를 자연스럽게 정렬하거나 사용자 지정 비교기를 사용하여 정렬합니다.

2.9 사용 사례

  • HashSet : 빠른 액세스 시간에 중점을 두고 순서가 중요하지 않은 경우에 가장 적합합니다.
  • TreeSet : 정렬된 순서로 요소에 액세스해야 하는 시나리오에 이상적입니다.
2.10 데모 결과: 반복 순서

아래 코드 조각을 실행하면 반복 순서의 차이를 보여줍니다.


// HashSet 예 Set hashSet = new HashSet(); hashSet.add("얼룩말"); hashSet.add("애플"); hashSet.add("망고"); System.out.println("HashSet: " hashSet); // 출력은 순서가 없을 수 있습니다(예: [Apple, Mango, Zebra]) // 트리세트 예시 Set treeSet = new TreeSet(); treeSet.add("얼룩말"); treeSet.add("사과"); treeSet.add("망고"); System.out.println("TreeSet: " treeSet); // 출력이 정렬됩니다(예: [Apple, Mango, Zebra])
// HashSet Example
Set hashSet = new HashSet();
hashSet.add("Zebra");
hashSet.add("Apple");
hashSet.add("Mango");
System.out.println("HashSet: "   hashSet); 
// Output may be unordered, e.g., [Apple, Mango, Zebra]

// TreeSet Example
Set treeSet = new TreeSet();
treeSet.add("Zebra");
treeSet.add("Apple");
treeSet.add("Mango");
System.out.println("TreeSet: "   treeSet); 
// Output will be sorted, e.g., [Apple, Mango, Zebra]
3. 결론

HashSet과 TreeSet 중에서 선택하는 것은 특정 요구 사항에 따라 결정됩니다.

    요소 순서에 관계없이 고성능 세트가 필요한 경우
  • HashSet를 사용하세요.
  • 요소를 자연스럽게 정렬하거나 사용자 정의 순서로 정렬해야 하는 경우
  • TreeSet를 사용하세요.
질문이 있으신가요? 아래에 자유롭게 의견을 남겨주세요!

에서 더 많은 게시물 읽기: Java에서 HashSet과 TreeSet의 주요 10가지 차이점

릴리스 선언문 이 기사는 https://dev.to/anh_trntun_4732cf3d299/top-10-key-differences-between-hashset-and-treeset-in-java-49f3?1에서 복제됩니다. 침해가 있는 경우, Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3