HashMap과 TreeMap의 차이점은 무엇입니까?
자바를 배우기 시작했어요.언제 TreeMap에서 HashMap을 사용할 수 있습니까?
TreeMap
는 의 예입니다.즉, 키의 순서를 정렬할 수 있으며, 키를 반복할 때는 순서대로 정렬할 수 있습니다.
HashMap
반면에, 그런 보장은 없습니다.그 때문에, 키상에서 반복하는 경우는,HashMap
순서가 어떻게 될지 알 수 없습니다.
HashMap
일반적으로는 더 효율적이기 때문에 키의 순서가 신경 쓰지 않을 때 사용합니다.
HashMap
는 해시 테이블에 의해 구현되며,TreeMap
에 의해 구현됩니다.Red-Black tree
의 주요 차이점은 다음과 같습니다.HashMap
그리고.TreeMap
사이의 주된 차이를 실제로 반영하다Hash
및 aBinary Tree
즉, 반복할 때 TreeMap은 요소의 compareTo() 메서드 또는 TreeMap의 컨스트럭터 내의 비교기 세트에 의해 결정되는 키의 순서를 보증할 수 있습니다.
정리하면:
- HashMap: hashCode(), equals() 구현, 삽입 및 검색을 위한 O(1) 런타임 복잡도에 기반한 룩업 배열 구조, 정렬되지 않음
- TreeMap : compareTo() 구현에 기반한 트리 구조, 삽입 및 검색을 위한 O(log(N) 런타임 복잡성, 정렬
사용하다HashMap
대부분의 경우 사용하지만TreeMap
키를 정렬해야 할 때(키를 반복해야 할 때)
Java에서의 HashMap 및 TreeMap 구현에 대해 설명하겠습니다.
HashMap - 기본 맵인터페이스를 구현
- 버킷 배열에 의해 구현되며 각 버킷은 엔트리의 LinkedList입니다.
- 기본 동작 실행 시간: put(), 평균 O(1), 최악의 경우 O(n), 테이블 크기 조정 시 발생; get(), remove(), 평균 O(1)
- 동기화되지 않음:
Map m = Collections.synchronizedMap(new HashMap(...));
- 맵의 반복 순서를 예측할 수 없습니다.
TreeMap - 탐색 가능한 지도 인터페이스를 구현합니다.
- 적흑색 나무에 의해 구현되다
- 기본 동작 실행 시간: put(), get(), remove(), 최악의 경우 O(lgn)
- 동기화되지 않음:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
- 순서 있는 반복을 제공합니다.higherKey() 및 lowerKey()를 사용하여 특정 키의 후속 키와 이전 키를 가져올 수 있습니다.
말하자면, HashMap과 TreeMap 사이의 가장 큰 차이점은 TreeMap 요약하자면을 행 한다, HashMap과 TreeMap의 가장 큰 차이점은 TreeMap이있다는 것입니다 구현되어.NavigableMap<K,V>
순서부여된 반복 기능을 제공합니다.또한 HashMap과 TreeMap은 모두 Java Collection 프레임워크의 멤버입니다.Java의 소스 코드를 조사하여 구현에 대해 자세히 알아볼 수 있습니다.
거의 언제나거의 항상 사용하시잖아요를 사용한다.HashMap
, 여러분은 겨우 를사용해야 합니다를 사용해야 한다.TreeMap
만약 당신이 특정 순서로 당신의 열쇠가 필요해요키를 특정 순서로 정렬할 필요가 있는 경우.
HashMap
빠른 조회에,고속검색에 사용됩니다는 반면에 사용됩니다.TreeMap
정렬된 반복의 지도를 사용합니다.맵에서정렬된 반복에 사용됩니다.
정렬된 키 저장소와 함께 TreeMap과 다른 점은 개발자가 (String) 줄 수 있다는 것입니다.CASE_INSECTIVE_ORDER)와 String 키를 함께 사용하므로 비교기는 맵액세스에서 키를 비교할 때 키의 대소문자를 무시합니다.HashMap에서는 이러한 옵션을 제공할 수 없습니다.HashMap에서는 항상 대소문자가 구분됩니다.
언급URL : https://stackoverflow.com/questions/2444359/what-is-the-difference-between-a-hashmap-and-a-treemap
'source' 카테고리의 다른 글
비동기 HTTP 요구를 호출해야 하는 VueJ 라이프 사이클 훅은 무엇입니까? (0) | 2022.08.17 |
---|---|
Eclipse에서 커버리지 강조 표시 지우기 (0) | 2022.08.17 |
VueJs를 사용하여 하위 구성 요소에서 개체 속성 변경 (0) | 2022.08.15 |
컴파일러는 컴파일 시 사이즈를 모르는 상태에서 어떻게 메모리를 할당합니까? (0) | 2022.08.15 |
표준 라이브러리에서 피해야 할 기능은 무엇입니까? (0) | 2022.08.15 |