В чем разница между HashMap
, LinkedHashMap
и TreeMap
в Java? Я не вижу никакой разницы в результатах, так как все три имеют keySet
и values
. Что Hashtable
с?
Map 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 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 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());
Hashtable
иHashMap
заключается в том, что в Hashtable «ни ключ, ни значение не могут быть нулевыми». Это ограничение не существует на последнем.Я предпочитаю визуальное представление:
источник
Все три представляют отображение от уникальных ключей к значениям и поэтому реализуют интерфейс Map .
HashMap - это карта, основанная на хешировании ключей. Он поддерживает O (1) операции get / put. Ключи должны иметь последовательные реализации
hashCode()
иequals()
для этого работать.LinkedHashMap очень похож на HashMap, но он добавляет понимание порядка, в котором элементы добавляются (или к которым осуществляется доступ), поэтому порядок итераций такой же, как порядок вставки (или порядок доступа, в зависимости от параметров построения).
TreeMap - это древовидное отображение. Его операции put / get занимают O (log n) времени. Это требует, чтобы элементы имели некоторый механизм сравнения, либо с Comparable, либо с Comparator. Порядок итерации определяется этим механизмом.
источник
LinkedHashMap
будет повторяться в порядке вставки, а не в естественном порядке. Так что если вы добавите(2,5,3)
к aLinkedHashMap
и сделаете для каждого над ним, он вернется2,5,3
. Если бы2,5,3
кTreeMap
он вернется2,3,5
.Посмотрите, где каждый класс находится в иерархии классов на следующей диаграмме ( больше ). TreeMap реализует,
SortedMap
аNavigableMap
покаHashMap
нет.HashTable
устарел иConcurrentHashMap
должен использоваться соответствующий класс.источник
HashMap
Хеш-таблица
LinkedHashMap
TreeMap
источник
Еще немного информации из моего собственного опыта работы с картами, когда я буду использовать каждую из них:
removeEldestEntry()
метода. Это позволяет вам создать объект Cache, который может просрочить данные, используя определенные вами критерии.источник
Все три класса
HashMap
,TreeMap
иLinkedHashMap
реализуетjava.util.Map
интерфейс, и представляют собой отображение уникального ключа для значений.HashMap
A
HashMap
содержит значения, основанные на ключе.Он содержит только уникальные элементы.
Может иметь один нулевой ключ и несколько нулевых значений.
Это не поддерживает порядок .
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
LinkedHashMap
LinkedHashMap
содержит значения, основанные на ключе.Это то же самое, что HashMap, вместо этого поддерживает порядок вставки . // Смотрите замедление класса ниже
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
TreeMap
TreeMap
содержит значения, основанные на ключе. Он реализует интерфейс NavigableMap и расширяет класс AbstractMap.Он такой же, как
HashMap
вместо этого, поддерживает восходящий порядок (сортируется с использованием естественного порядка его ключа.).public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
Хеш-таблица
Это унаследованный класс.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
Ссылка: http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html
источник
Посмотрите, как меняется производительность
Древовидная карта, которая является реализацией отсортированной карты. Сложность операции put, get и containsKey равна O (log n) из-за естественного упорядочения
источник
@Amit:
SortedMap
это интерфейс, тогдаTreeMap
как это класс, который реализуетSortedMap
интерфейс. Это означает, что если следует протоколу, которыйSortedMap
просит его исполнителей сделать. Дерево, если оно не реализовано в виде дерева поиска, не может дать вам упорядоченные данные, потому что дерево может быть любым видом дерева. Таким образом, чтобы заставить TreeMap работать как порядок сортировки, он реализует SortedMap (например, дерево двоичного поиска - BST, сбалансированное BST, такое как AVL и дерево RB, даже дерево троичного поиска - в основном используется для итеративного поиска в упорядоченном виде).В NUT-SHELL
HashMap
: данные в O (1), без упорядоченияTreeMap
: дает данные в O (log N), база 2. с упорядоченными ключамиLinkedHashMap
: является хеш-таблицей со связным списком (например, indexed-SkipList) возможностью хранить данные так, как они вставляются в дерево. Лучше всего подходит для реализации LRU (используется в последнее время).источник
Ниже приведены основные различия между HashMap и TreeMap.
HashMap не поддерживает порядок. Другими словами, HashMap не дает никакой гарантии, что элемент, вставленный первым, будет напечатан первым, где, как и TreeSet, элементы TreeMap также сортируются в соответствии с естественным порядком их элементов.
Внутренняя реализация HashMap использует Hashing, а TreeMap внутренне использует реализацию Red-Black tree.
HashMap может хранить один нулевой ключ и множество нулевых значений. TreeMap не может содержать нулевые ключи, но может содержать много нулевых значений.
HashMap требует постоянной производительности по времени для основных операций, таких как get и put, т.е. O (1). Согласно документации Oracle, TreeMap обеспечивает гарантированную стоимость log (n) для метода get и put.
HashMap намного быстрее, чем TreeMap, поскольку время выполнения HashMap является постоянным по отношению к времени журнала TreeMap для большинства операций.
HashMap использует метод equals () для сравнения, а TreeMap использует метод compareTo () для поддержания порядка.
HashMap реализует интерфейс Map, а TreeMap реализует интерфейс NavigableMap.
источник
Это разные реализации одного и того же интерфейса. Каждая реализация имеет свои преимущества и недостатки (быстрая вставка, медленный поиск) или наоборот.
Для получения дополнительной информации посмотрите на Javadoc TreeMap , HashMap , LinkedHashMap .
источник
Хэш-карта не сохраняет порядок вставки.
Пример. Hashmap Если вы вставляете ключи как
Он может хранить его как
Связанный Hashmap сохраняет порядок вставки.
Пример.
Если вы вставляете ключи
Это будет хранить как
так же, как мы вставляем.
Древовидная карта хранит долины в порядке возрастания ключей. Пример.
Если вы вставляете ключи
Это будет хранить как
источник
HashMap:
LinkedHashMap:
TreeMap:
источник
Все предлагают карту key-> value и способ перебирать ключи. Наиболее важным различием между этими классами являются временные гарантии и порядок ключей.
Представьте, что вы передали пустой TreeMap, HashMap и LinkedHashMap в следующую функцию:
Вывод для каждого будет выглядеть так, как показано ниже.
Для HashMap выходные данные в моих собственных тестах были {0, 1, -1}, но это мог быть любой порядок. Там нет гарантии на заказ.
Древовидная карта, выходные данные были {-1, 0, 1}
LinkedList, выходные данные были {1, -1, 0}
источник
Хотя здесь есть много отличных ответов, я хотел бы представить свою собственную таблицу, описывающую различные
Map
реализации, связанные с Java 11.Мы можем видеть эти различия, перечисленные на графике таблицы:
HashMap
является универсальным,Map
обычно используемым, когда у вас нет особых потребностей.LinkedHashMap
расширяетHashMap
, добавляя это поведение: Поддерживает порядок, порядок, в котором записи были первоначально добавлены . Изменение значения для ввода значения ключа не меняет его место в заказе.TreeMap
также поддерживает порядок, но использует либо (a) «естественный» порядок , означающий значениеcompareTo
метода для ключевых объектов, определенных вComparable
интерфейсе, либо (b) вызывает предоставленнуюComparator
вами реализацию .TreeMap
реализует какSortedMap
интерфейс, так и его преемник,NavigableMap
интерфейс.TreeMap
это не позволяют NULL в качестве ключа , аHashMap
&LinkedHashMap
делать.HashTable
является наследием от Java 1 . ВытесняетсяConcurrentHashMap
классом. Цитирование Javadoc: соответствуетConcurrentHashMap
той же функциональной спецификацииHashtable
, что и включает версии методов, соответствующих каждому методуHashtable
.источник
HashMap
может содержать один нулевой ключ.
HashMap не поддерживает порядок.
TreeMap
TreeMap не может содержать нулевой ключ.
TreeMap поддерживает восходящий порядок.
LinkedHashMap
LinkedHashMap может использоваться для поддержания порядка вставки, при котором ключи вставляются в Map, или его также можно использовать для поддержания порядка доступа, к которому обращаются ключи.
Примеры ::
1) HashMap map = new HashMap ();
2) Карта TreeMap = новая TreeMap ();
3) LinkedHashMap map = new LinkedHashMap ();
источник
Наиболее важным среди всех трех является то, как они сохраняют порядок записей.
HashMap
- Не сохраняет порядок записей. например.LinkedHashMap
Сохраняет порядок, в котором были сделаны записи. например:TreeMap
: Сохраняет записи в порядке возрастания ключей. например:источник