Java HashMap і TreeMap обидва є класами структури Java Collections. Реалізація Java Map зазвичай діє як сегментована хеш-таблиця. Коли відра стають занадто великими, вони перетворюються на вузли TreeNodes , кожен структурований подібно до тих, що в java.util.TreeMap .
HashMap
HashMap реалізує Карта, Cloneable і Серіалізований інтерфейс. Він розширюється Абстрактна карта клас. Це належить java.util пакет.
- HashMap містить значення на основі ключа.
- Він може мати один нульовий ключ і кілька нульових значень.
- HashMap не підтримує порядок під час ітерації.
- Він містить унікальні елементи.
- Працює за принципом хешування.
TreeMap
Клас TreeMap розширюється Абстрактна карта клас і знаряддя NavigableMap , Можливість клонування , і Серіалізований інтерфейс. TreeMap є прикладом a SortedMap . Це реалізовано червоно-чорним деревом, що означає, що порядок ключів відсортований.
- TreeMap також містить значення на основі ключа.
- TreeMap сортується за ключами.
- Він містить унікальні елементи.
- Він не може мати нульовий ключ, але мати кілька нульових значень.
- Ключі розташовані в порядку зростання.
- Він зберігає об’єкт у структурі дерева.
Подібності між HashMap і TreeMap
- Обидва класи розширюються Абстрактна карта клас.
- Карта — це об’єкт, який зберігає ключ-значення пари. У парі ключ-значення кожен ключ унікальний, але їхні значення можуть бути унікальними дублікат .
- Обидва класи представляють відображення з ключ до значення .
- Обидві карти ні синхронізовано .
- Використання карти поставити() метод додавання елемента на карту.
- Ітератор кидає a ConcurrentModificationException якщо карту будь-яким чином змінено.
Ключова відмінність між HashMap і TreeMap:
HashMap не зберігає порядок ітерацій, поки TreeMap зберегти порядок за допомогою порівняти() метод або a компаратор встановити в конструкторі TreeMap.
У наведеній нижче таблиці описано відмінності між HashMap і TreeMap.
Основа | HashMap | TreeMap |
---|---|---|
Визначення | Java HashMap це реалізація інтерфейсу карти на основі хеш-таблиці. | Java TreeMap це реалізація інтерфейсу карти на основі деревовидної структури. |
Реалізації інтерфейсу | HashMap реалізує Карта, Cloneable , і Серіалізований інтерфейс. | TreeMap реалізує NavigableMap, Cloneable , і Серіалізований інтерфейс. |
Нульові ключі/значення | HashMap дозволяє a неодружений нульовий ключ і багаторазовий нульові значення. | TreeMap не дозволяє нуль ключі але можна мати багаторазовий нульові значення. |
Однорідний/ Неоднорідний | HashMap допускає різнорідні елементи, оскільки не виконує сортування за ключами. | TreeMap дозволяє використовувати однорідні значення як ключ завдяки сортуванню. |
Продуктивність | HashMap є швидше ніж TreeMap, тому що він забезпечує постійну продуктивність O(1) для основних операцій, таких як get() і put(). | TreeMap є повільний у порівнянні з HashMap, оскільки він забезпечує продуктивність O(log(n)) для більшості операцій, таких як add(), remove() і contains(). |
Структура даних | Клас HashMap використовує хеш-таблиця . | TreeMap внутрішньо використовує a Червоно-Чорний дерево, яке є самобалансуючим бінарним деревом пошуку. |
Метод порівняння | Це використовує дорівнює() метод Об'єкт клас для порівняння ключів. Метод equals() класу Map замінює його. | Він використовує порівняти() метод порівняння ключів. |
Функціональність | Клас HashMap містить лише основні функції, такі як get(), put(), KeySet() і т.д. | Клас TreeMap багатий на функціональність, оскільки містить такі функції, як: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Порядок елементів | HashMap не підтримує жодного порядку. | Елементи відсортовані природний порядок (за зростанням). |
Використання | HashMap слід використовувати, коли нам не потрібна пара ключ-значення в порядку сортування. | TreeMap слід використовувати, коли нам потрібна пара ключ-значення у відсортованому (за зростанням) порядку. |
Приклад HashMap проти TreeMap
У наступному прикладі ми можемо помітити, що елементи HashMap розташовані у випадковому порядку, тоді як елементи TreeMap розташовані в порядку зростання.
цикл while java
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
Вихід: