Вопрос-ответ

Difference between HashMap, LinkedHashMap and TreeMap

Разница между HashMap, LinkedHashMap и TreeMap

В чем разница между HashMap, LinkedHashMap и TreeMap в Java?

Я не вижу никакой разницы в выходных данных, поскольку все три имеют keySet и values.

Кроме того, что такое Hashtables?

Map<String, String> m1 = new HashMap<>();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());

SortedMap<String, String> sm = new TreeMap<>();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());

LinkedHashMap<String, String> lm = new LinkedHashMap<>();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
Переведено автоматически
Ответ 1

Я предпочитаю визуальное представление:























































СвойствоHashMapTreeMapLinkedHashMap
Порядок итерацийнет гарантированного порядка, будет оставаться постоянным с течением временисортировка в соответствии с естественным порядкомпорядок вставки
Получить / поместить / удалить / containsKeyO(1)O(журнал (n))O(1)
ИнтерфейсыКартаНавигационная карта, Map, SortedMapКарта
Нулевые значения / ключиразрешенныйтолько значенияразрешенный
Отказоустойчивое поведениеОтказоустойчивое поведение итератора не может быть гарантировано, невозможно дать какие-либо твердые гарантии при наличии несинхронизированной параллельной модификацииОтказоустойчивое поведение итератора не может быть гарантировано, невозможно дать какие-либо твердые гарантии при наличии несинхронизированной параллельной модификацииОтказоустойчивое поведение итератора не может быть гарантировано, невозможно дать какие-либо твердые гарантии при наличии несинхронизированной параллельной модификации
РеализациясегментыКрасно-черное дереводвухсвязные сегменты
Синхронизированреализация не синхронизированареализация не синхронизированареализация не синхронизирована

Ответ 2

Все три класса реализуют Map интерфейс и предлагают в основном одинаковую функциональность. Наиболее важным отличием является порядок, в котором будут выполняться итерации по записям:


  • HashMap не дает абсолютно никаких гарантий относительно порядка итераций. Он может (и будет) даже полностью меняться при добавлении новых элементов.

  • TreeMap будет выполняться итерация в соответствии с "естественным порядком" ключей в соответствии с их compareTo() методом (или предоставленным извне Comparator). Кроме того, он реализует SortedMap интерфейс, который содержит методы, зависящие от этого порядка сортировки.

  • LinkedHashMap будет выполняться итерация в том порядке, в котором записи были помещены на карту

"Хэш-таблица" - это общее название карт на основе хэша. В контексте Java API, Hashtable является устаревшим классом со времен Java 1.1, до того, как существовала платформа collections framework. Его больше не следует использовать, потому что его API загроможден устаревшими методами, которые дублируют функциональность, а его методы синхронизированы (что может снизить производительность и, как правило, бесполезно). Используйте ConcurrentHashMap вместо Hashtable.

Ответ 3

Все три представляют сопоставление уникальных ключей со значениями и, следовательно, реализуют интерфейс Map.


  1. HashMap - это карта, основанная на хешировании ключей. Она поддерживает O (1) операций get / put. Ключи должны иметь согласованные реализации hashCode() и equals(), чтобы это работало.


  2. LinkedHashMap очень похож на HashMap, но он повышает осведомленность о порядке добавления элементов (или доступа к ним), поэтому порядок итераций такой же, как порядок вставки (или порядок доступа, в зависимости от параметров построения).


  3. TreeMap - это отображение на основе дерева. Операции ввода / получения в нем занимают O (log n) времени. Для элементов требуется некоторый механизм сравнения, либо с Comparable, либо с Comparator. Порядок итераций определяется этим механизмом.


Ответ 4

Посмотрите, где находится каждый класс в иерархии классов на следующей диаграмме (более крупной). TreeMap реализует SortedMap, а NavigableMap while HashMap - нет.

HashTable устарел, и следует использовать соответствующий ConcurrentHashMap класс. введите описание изображения здесь

2023-11-28 12:24 java