HashMap und LinkedHashMap sind zwei der häufigsten und allgemeinsten Map-Implementierungen in der Java-Plattform. Sie sind im Grunde Hash-basierte Klassen, die einander ziemlich ähnlich sind und zum Erstellen einer Map verwendet werden. Die Kartenschnittstelle ist die letzte der wichtigsten Collections Framework-Schnittstellen, in der die Vorgänge definiert werden, die von einer Reihe von Schlüssel-Wert-Assoziationen unterstützt werden, bei denen die Schlüssel eindeutig sind. Diese Map-Implementierungen basieren auf einem Hash-Algorithmus. Während die Klasse HashMap ungeordnete Karten implementiert, implementiert die Klasse LinkedHashMap geordnete Karten. Die LinkedHashMap-Implementierung ist eine Unterklasse der HashMap-Klasse, dh sie erbt die Funktionen der Klasse HashMap. Es gibt keinen großen Unterschied zwischen den beiden hinsichtlich der Leistung. Lass uns einen Blick darauf werfen.
HashMap ist eine der häufigsten und unter den vier universellen Implementierungen der Map-Schnittstelle in Java, die auf einem Hash-Algorithmus basiert. Es ist analog zu der Set-Klasse HashSet, obwohl die Elemente in beiden Klassen ungeordnet sind. Es ist als Hash-Tabelle implementiert, behält jedoch im Gegensatz zu LinkedHashMap keine Reihenfolge der Schlüssel oder Werte bei. Im Allgemeinen bietet HashMap eine konstante Performance für Put und Get. Die Klasse ist nicht threadsicher, erlaubt jedoch einen Nullschlüssel und mehrere Nullwerte. Da es keine Iterationsreihenfolge aufrechterhält, benötigt es weniger Speicher.
LinkedHashMap ist eine der vier Allzweckimplementierungen der Map-Schnittstelle, die eine Unterklasse der HashMap-Klasse ist, dh sie erbt ihre Funktionen. HashMap ist zwar in Bezug auf die Leistung sehr ähnlich, behält jedoch die Reihenfolge der Schlüssel beim Einfügen bei, entweder in der Reihenfolge, in der die Schlüssel in die Map eingefügt werden, oder in der Reihenfolge, in der auf die Einträge in der Map zugegriffen wird. Es verfeinert den Vertrag seiner übergeordneten Klasse, indem es die Reihenfolge garantiert, in der die Iteratoren ihre Elemente zurückgeben. Es erfordert jedoch mehr Speicher als eine HashMap, da in Java eine doppelt verknüpfte Liste verwaltet wird.
HashMap ist eine Hash-basierte Implementierung der Map-Schnittstelle in Java. Karten sind eine Sammlung von Schlüssel-Wert-Paaren und werden verwendet, wenn sich Listen in geordneter Sammlung befinden. HashMap ist eine Collection-Klasse, die Werte in Schlüssel-Wert-Paaren speichert. Einfach ausgedrückt, werden Schlüssel zu Werten zugeordnet, was bedeutet, dass ein Wert anhand eines Schlüssels ermittelt werden kann. LinkedHashMap ist eine verkettete Listenimplementierung der Map-Schnittstelle, genau wie HashMap, außer dass die Reihenfolge der darin eingefügten Elemente beibehalten wird. Es ist eine Unterklasse von HashMap, die ihre Funktionen erbt. LinkedHashMap verfeinert den Vertrag seiner übergeordneten Klasse HashMap, indem die Reihenfolge garantiert wird, in der die Iteratoren ihre Elemente zurückgeben.
Der Hauptunterschied zwischen HashMap und LinkedHashMap ist die Reihenfolge. Elemente einer HashMap sind nicht in der Reihenfolge, sondern völlig zufällig, wohingegen Elemente von LinkedHashMap geordnet sind. Die Einträge einer LinkedHashMap befinden sich in der Reihenfolge der Schlüsseleinfügung. Dies ist die Reihenfolge, in der die Schlüssel in die Map eingefügt werden. Das heißt, der erste in die Map eingefügte Schlüssel wird zuerst aufgelistet, der zugehörige Wert und der letzte Eintrag, der zuletzt in der Aufzählung eingefügt wurde. LinkedHashMap verfügt über eine vorhersagbare Iterationsreihenfolge, sodass die Elemente auch in Zugriffsreihenfolge verwaltet werden können. Dies ist die Reihenfolge, in der auf die Einträge zugegriffen wird.
Sowohl die HashMap- als auch die LinkedHashMap-Klasse verwenden Hashing, um die Map-Schnittstelle in Java zu implementieren, mit der Ausnahme, dass HashMap als Hashtabelle implementiert ist, während LinkedHashMap eine doppelt verknüpfte Liste von Buckets verwaltet, die alle Einträge durchlaufen. Aus diesem Grund benötigt LinkedHashMap mehr Speicher als HashMap, da es im Gegensatz zu HashMap eine Reihenfolge aufrechterhält. Es entfernt die chaotische Anordnung von HashMap, ohne die zusätzlichen Kosten zu tragen, die anderenfalls bei TreeMap entstanden wären. Abgesehen davon ist die LinkedHashMap-Klasse in vielen Aspekten der HashMap-Klasse sehr ähnlich, z. B. Synchronisation und Nullschlüssel / -werte, da beide einen Nullschlüssel und mehrere Nullwerte zulassen.
Obwohl beide Klassen eine vergleichbare Leistung bieten, wird davon ausgegangen, dass die HashMap-Klasse die bevorzugte Wahl ist, wenn die Reihenfolge kein Problem darstellt, da sie keine Garantie für die iterierende Reihenfolge der Map bietet. Vorgänge wie das Hinzufügen, Entfernen oder Suchen von Einträgen basierend auf einem Schlüssel sind eine konstante Zeit, da sie den Schlüssel markieren. Das Hinzufügen, Entfernen und Suchen von Einträgen in einer LinkedHashMap kann daher etwas langsamer sein als in einer HashMap, da sie eine doppelt verknüpfte Liste von Buckets in Java enthält. Darüber hinaus benötigt HashMap weniger Arbeitsspeicher als LinkedHashMap, da keine Reihenfolge beibehalten wird.
Obwohl sowohl die HashMap- als auch die HashMap-Klasse in der Leistung fast gleich sind, benötigt HashMap weniger Speicher als eine LinkedHashMap, da die iterierende Reihenfolge der Map nicht garantiert wird. Dadurch werden Einträge in einer HashMap relativ schneller hinzugefügt, entfernt und gefunden, als dies bei HashMap der Fall ist eine LinkedHashMap. Der Hauptunterschied zwischen den beiden ist jedoch die Reihenfolge: Die Elemente einer HashMap sind nicht in der richtigen Reihenfolge, während die Elemente einer LinkedHashMap standardmäßig in der Reihenfolge des Einfügens von Schlüsseln stehen, dh in der Reihenfolge, in der die Schlüssel in die Map eingefügt werden. LinkedHashMap kann seine Elemente auch in Zugriffsreihenfolge verwalten, dh in der Reihenfolge, auf die auf die Einträge zugegriffen wird. Wie bei LinkedHashMap muss eine doppelt verknüpfte Liste verwaltet werden, die weniger Leistung als HashMap bietet.