HashMap과 TreeMap의 차이점은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
나는 자바를 배우기 시작했다. TreeMap에서 HashMap을 언제 사용합니까?
TreeMap의 예는 SortedMap키의 순서를 정렬 할 수 있음을 의미하며 키를 반복 할 때 순서대로 정렬 될 것으로 예상 할 수 있습니다.
HashMap반면에, 그런 보장을하지 않습니다. 따라서의 키를 반복 할 때 HashMap순서가 어떤지 확실하지 않습니다.
HashMap 일반적으로 더 효율적이므로 키 순서에 신경 쓰지 않을 때마다 사용하십시오.
HashMap은 해시 테이블에 의해 구현되고에 의해 TreeMap구현됩니다 Red-Black tree. 주요 차이점 HashMap과 TreeMap실제로는 주요 차이점 반영 Hash하고을 Binary Tree, 즉, 순회가 트리 맵 보장 어느 요소의 compareTo와 () 메소드 또는 트리 맵의 생성자 비교기 세트에 의해 키 순서 판단 할 수있는 경우.
다음 다이어그램을 살펴보십시오 .

요약하면 :
- HashMap : hashCode (), equals () 구현, 삽입 및 검색을위한 O (1) 런타임 복잡성, 정렬되지 않은 정렬 배열 구조
- TreeMap : compareTo () 구현을 기반으로 한 트리 구조, 삽입 및 검색을위한 O (log (N)) 런타임 복잡성, 정렬
에서 촬영 : HashMap에 대 트리 맵
사용 HashMap시간이지만 사용의 대부분을 TreeMap당신은 정렬 할 키를 필요로 할 때 (당신이 키를 반복해야하는 경우).
Java에서 HashMap 및 TreeMap 구현에 대해 이야기하겠습니다 .
HashMap-기본 맵 인터페이스 구현
- 버킷 배열로 구현되는 각 버킷은 항목의 링크 된 목록입니다.
- 기본 작업 실행 시간 : 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의 가장 큰 차이점 NavigableMap<K,V>은 순서화 된 반복 기능을 제공 하는 TreeMap 구현 입니다. 또한 HashMap과 TreeMap은 모두 Java Collection 프레임 워크의 멤버입니다. Java 소스 코드를 조사하여 해당 구현에 대해 자세히 알 수 있습니다 .
거의 항상을 사용 합니다. 키가 특정 순서로 HashMap있어야하는 TreeMap경우 에만 사용해야 합니다.
HashMap빠른 조회에 TreeMap사용되는 반면 맵에서 정렬 된 반복에 사용됩니다.
정렬 된 키 저장소와 함께 TreeMap의 또 다른 차이점은 개발자가 String 키로 (String.CASE_INSENSITIVE_ORDER)를 줄 수 있으므로 비교기는 맵 액세스에서 키 비교를 수행하는 동안 키의 경우를 무시합니다. HashMap에서는 이러한 옵션을 제공 할 수 없습니다. 항상 HashMap에서 대소 문자를 구분합니다.
참고 URL : https://stackoverflow.com/questions/2444359/what-is-the-difference-between-a-hashmap-and-a-treemap
'Programming' 카테고리의 다른 글
| PHP에서 전역 변수를 선언하는 방법은 무엇입니까? (0) | 2020.06.04 |
|---|---|
| 범주 형 변수 차트에서 개수 대신 % 표시 (0) | 2020.06.04 |
| Eclipse에서 디버깅하는 동안 전체 문자열보기 (0) | 2020.06.04 |
| HttpListener 액세스가 거부되었습니다. (0) | 2020.06.04 |
| “Thread.sleep”이없는“while (true)”가 Linux에서 100 % CPU 사용을 야기하지만 Windows에서는 왜 발생하지 않습니까? (0) | 2020.06.04 |