Was ist der Unterschied zwischen HashMap
, LinkedHashMap
und TreeMap
in Java? Ich sehe keinen Unterschied in der Ausgabe, da alle drei keySet
und haben values
. Was sind Hashtable
s?
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
undHashMap
besteht darin, dass in einer Hashtabelle "weder der Schlüssel noch der Wert null sein können". Diese Einschränkung besteht für letztere nicht.Ich bevorzuge visuelle Präsentation:
quelle
Alle drei stellen Zuordnung von eindeutigen Schlüssel auf Werte, und damit die Umsetzung Map - Schnittstelle.
HashMap ist eine Map, die auf dem Hashing der Schlüssel basiert . Es unterstützt O (1) get / put-Operationen. Schlüssel müssen konsistente Implementierungen von
hashCode()
und haben,equals()
damit dies funktioniert.LinkedHashMap ist HashMap sehr ähnlich, erhöht jedoch die Bekanntheit der Reihenfolge, in der Elemente hinzugefügt werden (oder auf die zugegriffen wird), sodass die Iterationsreihenfolge der Einfügereihenfolge (oder der Zugriffsreihenfolge, abhängig von den Konstruktionsparametern) entspricht.
TreeMap ist eine baumbasierte Zuordnung. Die Put / Get-Operationen benötigen O (log n) Zeit. Elemente müssen über einen Vergleichsmechanismus verfügen, entweder mit Comparable oder Comparator. Die Iterationsreihenfolge wird durch diesen Mechanismus bestimmt.
quelle
LinkedHashMap
wird in der Einfügereihenfolge iterieren, nicht in der natürlichen Reihenfolge. Also , wenn Sie hinzufügen ,(2,5,3)
um eineLinkedHashMap
für jede über sie und machen ein, wird er zurückkehren2,5,3
. Wenn es2,5,3
zu einem wäreTreeMap
, wird es zurückkehren2,3,5
.Sehen Sie im folgenden Diagramm ( größere ), wo sich jede Klasse in der Klassenhierarchie befindet . TreeMap implementiert
SortedMap
undNavigableMap
währendHashMap
nicht.HashTable
ist veraltet und die entsprechendeConcurrentHashMap
Klasse sollte verwendet werden.quelle
HashMap
Hash-tabelle
LinkedHashMap
Baumkarte
quelle
Nur noch ein paar Eingaben aus meiner eigenen Erfahrung mit Karten, wann ich jede verwenden würde:
removeEldestEntry()
Methode. Auf diese Weise können Sie ein Cache-Objekt erstellen, das Daten anhand einiger von Ihnen definierter Kriterien ablaufen lässt.quelle
Alle drei Klassen
HashMap
,TreeMap
undLinkedHashMap
Geräte -java.util.Map
Schnittstelle und stellt Zuordnung von eindeutigen Schlüssel auf Werte.HashMap
A
HashMap
enthält Werte basierend auf dem Schlüssel.Es enthält nur eindeutige Elemente.
Es kann einen Nullschlüssel und mehrere Nullwerte haben.
Es wird keine Ordnung aufrechterhalten .
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
LinkedHashMap
LinkedHashMap
enthält Werte basierend auf dem Schlüssel.Es ist die gleiche wie HashMap anstelle hält Auftrag . // Siehe Klassenverzögerung unten
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
Baumkarte
TreeMap
enthält Werte basierend auf dem Schlüssel. Es implementiert die NavigableMap-Schnittstelle und erweitert die AbstractMap-Klasse.Es ist dasselbe wie
HashMap
stattdessen die aufsteigende Reihenfolge beizubehalten (sortiert nach der natürlichen Reihenfolge seines Schlüssels).public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
Hash-tabelle
Es ist eine Legacy-Klasse.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
Ref: http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html
quelle
Schauen Sie sich an, wie unterschiedlich die Leistung ist.
Baumkarte, die eine Implementierung der sortierten Karte ist. Die Komplexität der Operation put, get und includesKey ist aufgrund der natürlichen Reihenfolge O (log n)
quelle
@Amit:
SortedMap
ist eine Schnittstelle, währendTreeMap
es sich um eine Klasse handelt, die dieSortedMap
Schnittstelle implementiert . Das heißt, wenn das Protokoll befolgt wird, zu dem dieSortedMap
Implementierer aufgefordert werden. Ein Baum kann, sofern er nicht als Suchbaum implementiert ist, keine geordneten Daten liefern, da der Baum jede Art von Baum sein kann. Damit TreeMap wie eine sortierte Reihenfolge funktioniert, wird SortedMap implementiert (z. B. Binary Search Tree - BST, Balanced BST wie AVL und RB Tree, sogar Ternary Search Tree - meistens für iterative Suchen in geordneter Weise).In NUT-SHELL
HashMap
: Gibt Daten in O (1) an, keine ReihenfolgeTreeMap
: gibt Daten in O (log N), Basis 2. mit geordneten Schlüsseln anLinkedHashMap
: ist eine Hash-Tabelle mit verknüpfter Liste (denken Sie an indexed-SkipList), mit der Daten so gespeichert werden können, wie sie in den Baum eingefügt werden. Am besten geeignet für die Implementierung von LRU (zuletzt verwendet).quelle
Im Folgenden sind die Hauptunterschiede zwischen HashMap und TreeMap aufgeführt
HashMap verwaltet keine Reihenfolge. Mit anderen Worten, HashMap bietet keine Garantie dafür, dass das zuerst eingefügte Element zuerst gedruckt wird. Wie bei TreeSet werden auch TreeMap-Elemente nach der natürlichen Reihenfolge ihrer Elemente sortiert
Interne HashMap-Implementierung verwendet Hashing und TreeMap verwendet intern die Rot-Schwarz-Baumimplementierung.
HashMap kann einen Nullschlüssel und viele Nullwerte speichern. TreeMap kann keine Nullschlüssel enthalten, kann jedoch viele Nullwerte enthalten.
HashMap benötigt eine konstante Zeitleistung für die grundlegenden Operationen wie get und put, dh O (1). Gemäß Oracle-Dokumenten bietet TreeMap garantierte log (n) Zeitkosten für die get- und put-Methode.
HashMap ist viel schneller als TreeMap, da die Leistungszeit von HashMap für die meisten Vorgänge gegenüber der Protokollzeit TreeMap konstant ist.
HashMap verwendet im Vergleich die Methode equals (), während TreeMap die Methode compareTo () verwendet, um die Reihenfolge aufrechtzuerhalten.
HashMap implementiert die Map-Schnittstelle, während TreeMap die NavigableMap-Schnittstelle implementiert.
quelle
Dies sind verschiedene Implementierungen derselben Schnittstelle. Jede Implementierung hat einige Vor- und Nachteile (schnelles Einfügen, langsame Suche) oder umgekehrt.
Weitere Informationen finden Sie im Javadoc von TreeMap , HashMap , LinkedHashMap .
quelle
Die Hash-Map behält die Einfügereihenfolge nicht bei.
Beispiel. Hashmap Wenn Sie Schlüssel als einfügen
Es kann es speichern als
Die verknüpfte Hashmap behält die Einfügereihenfolge bei.
Beispiel.
Wenn Sie Schlüssel einfügen
Es wird gespeichert als
das gleiche wie wir einfügen.
In der Baumkarte werden die Werte in aufsteigender Reihenfolge der Schlüssel gespeichert. Beispiel.
Wenn Sie Schlüssel einfügen
Es wird gespeichert als
quelle
HashMap:
LinkedHashMap:
Baumkarte:
quelle
Alle bieten eine Schlüssel-> Wertekarte und eine Möglichkeit, die Schlüssel zu durchlaufen. Der wichtigste Unterschied zwischen diesen Klassen sind die Zeitgarantien und die Reihenfolge der Schlüssel.
Stellen Sie sich vor, Sie haben eine leere TreeMap, HashMap und LinkedHashMap an die folgende Funktion übergeben:
Die Ausgabe für jedes sieht wie folgt aus.
Für HashMap war die Ausgabe in meinen eigenen Tests {0, 1, -1}, aber es kann sich um eine beliebige Reihenfolge handeln. Es gibt keine Garantie für die Bestellung.
Treemap, die Ausgabe war {-1, 0, 1}
LinkedList, die Ausgabe war {1, -1, 0}
quelle
Obwohl es hier viele hervorragende Antworten gibt, möchte ich meine eigene Tabelle präsentieren, in der die verschiedenen
Map
mit Java 11 gebündelten Implementierungen beschrieben werden .Wir können diese Unterschiede in der Tabellengrafik sehen:
HashMap
ist der allgemeine Zweck, derMap
häufig verwendet wird, wenn Sie keine besonderen Bedürfnisse haben.LinkedHashMap
erweitertHashMap
und fügt dieses Verhalten hinzu: Verwaltet eine Reihenfolge, die Reihenfolge, in der die Einträge ursprünglich hinzugefügt wurden . Durch Ändern des Werts für die Schlüsselwerteingabe wird der Platz in der Bestellung nicht geändert.TreeMap
Auch behält eine Reihenfolge bei, verwendet jedoch entweder (a) die "natürliche" Reihenfolge , dh den Wert dercompareTo
Methode für die auf derComparable
Schnittstelle definierten Schlüsselobjekte , oder (b) ruft eine vonComparator
Ihnen bereitgestellte Implementierung auf .TreeMap
implementiert sowohl dieSortedMap
Schnittstelle als auch deren Nachfolger, dieNavigableMap
Schnittstelle.TreeMap
Erlaubt kein NULL als Schlüssel , währendHashMap
&LinkedHashMap
do.HashTable
ist Vermächtnis von Java 1 . Unterstützt von derConcurrentHashMap
Klasse. Zitieren des Javadoc:ConcurrentHashMap
folgt der gleichen Funktionsspezifikation wieHashtable
und enthält Versionen von Methoden, die jeder Methode von entsprechenHashtable
.quelle
HashMap
kann einen Nullschlüssel enthalten.
HashMap behält keine Reihenfolge bei.
Baumkarte
TreeMap darf keinen Nullschlüssel enthalten.
TreeMap behält die aufsteigende Reihenfolge bei.
LinkedHashMap
LinkedHashMap kann verwendet werden, um die Einfügereihenfolge zu verwalten, in der Schlüssel in Map eingefügt werden, oder es kann auch verwendet werden, um eine Zugriffsreihenfolge zu verwalten, in der auf Schlüssel zugegriffen wird.
Beispiele ::
1) HashMap map = new HashMap ();
2) TreeMap map = new TreeMap ();
3) LinkedHashMap map = new LinkedHashMap ();
quelle
Das wichtigste unter allen dreien ist, wie sie die Reihenfolge der Einträge speichern.
HashMap
- Speichert nicht die Reihenfolge der Einträge. z.B.LinkedHashMap
: Es speichert die Reihenfolge, in der Eingaben gemacht wurden. z.B:TreeMap
: Es speichert die Einträge in aufsteigender Reihenfolge der Schlüssel. z.B:quelle