Was ist HashMap?
HashMap bezeichnet als HashMap<Key, Value> oder HashMap<K, V>. Es ist die erweiterte Version von HashTable und wurde als neue Klasse in JDK 1.2 eingeführt. Es ist ein Teil von Java Collections. Es stellt die grundlegende Implementierung der Map-Schnittstelle von Java bereit. Es speichert die Daten in (Schlüssel, Wert)-Paaren und Sie können auf sie über einen Index eines anderen Typs (zB eine ganze Zahl) zugreifen. Ein Objekt wird als Schlüssel (Index) für ein anderes Objekt (Wert) verwendet.
Eine HashMap verwendet eine Technik, die als ”Hashing” bezeichnet wird. Beim Hashing wird ein längerer String in einen kürzeren String umgewandelt, indem ein Algorithmus oder eine „Hash-Funktion“ angewendet wird. Eine Zeichenfolge wird in eine kürzere Zeichenfolge umgewandelt, da dies bei der Suche schneller ist. Es wird für eine effiziente Indexierung verwendet.
HashMap ähnelt der HashTable, ist jedoch nicht synchronisiert. Es erlaubt auch, die Nullschlüssel zu speichern, aber es sollte nur ein Nullschlüsselobjekt geben und es kann eine beliebige Anzahl von Nullwerten geben. Dies gibt keine Garantie hinsichtlich der Ordnung der Karte. Um diese Klasse und ihre Methoden zu verwenden, müssen Sie das Paket java.util.HashMap oder seine Superklasse importieren.
Was Sie über HashMap wissen müssen
- HashMap ist die erweiterte Version von HashTable und wurde als neue Klasse in JDK 1.2 eingeführt. Es ist ein Teil von Java Collections.
- Es implementiert Map und Serializable-Schnittstelle.
- Die Synchronisierung ist in HashMap nicht implementiert und ist nicht Thread-sicher. Daher kann sie ohne ordnungsgemäße Synchronisierung nicht von vielen Threads gemeinsam genutzt werden.
- HashMap erbt die Klasse AbstractMap.
- HashMap stellt Iterator für seine Iteration bereit, um die darin gespeicherten Werte zu durchlaufen.
- Die interne Implementierung beider Klassen ist bis zu einem gewissen Grad gleich. Im Fall von HashMap sind jedoch ein Nullschlüssel und mehrere Nullwerte zulässig.
- Aufgrund der fehlenden Synchronisierung ist HashMap im Vergleich zu HashTable schneller und wird bevorzugt, wenn keine Synchronisierung erforderlich ist.
- HashMap verwendet einen ausgeglichenen Baum als Kollisionsauflösungsstrategie, der eine begrenzende Suchzeit von O(log n) hat.
- Iterator ist fehlerschnell und löst eine gleichzeitige Änderungsausnahme aus, wenn ein anderer Thread versucht, die Map zu ändern.
- HashMap behält die Einfügereihenfolge in Java nicht bei.
- Die anfängliche Standardkapazität einer HashTable in der HashMap-Klasse beträgt 16 und der (initiale) Standardlastfaktor beträgt 0,75
Hash-tabelle
Eine HashTable ist eine Datenstruktur, die Daten assoziativ speichert. In einer HashTable werden Daten in einem Array-Format gespeichert, in dem jeder Wert seinen eigenen eindeutigen Indexwert hat. Es verwendet eine Hash-Funktion, um einen Index in ein Array zu berechnen, in dem ein Element eingefügt oder gesucht wird.
In HashTable sind Einfüge- und Suchvorgänge unabhängig von der Größe der Daten sehr schnell. HashTable verwendet ein Array als Speichermedium und verwendet HashTable verwendet ein Array als Speichermedium und verwendet eine Hash-Technik, um zu generieren und zu indizieren, wo ein Element eingefügt werden soll oder von wo aus es zu finden ist.
In Java wird die HashTable durch die Klasse ‘HashTable’ implementiert. Diese Klasse implementiert die Map-Schnittstelle und erbt die Dictionary-Klasse.
Was Sie über HashTable wissen müssen
- HashTable ist eine Legacy-Klasse und wurde vor HashMap eingeführt, sie war nicht Teil der ursprünglichen Java-Sammlungen.
- Es implementiert den Sammlungsrahmen.
- HashTable wird synchronisiert und ist Thread-sicher, daher kann es mit vielen Threads geteilt werden.
- HashTable erbt die Dictionary-Klasse.
- Iterator HashTable stellt auch Enumerator bereit, um die darin gespeicherten Werte zu durchlaufen.
- HashTable ist intern so implementiert, dass es keinen NULL-Schlüssel oder NULL-Wert zulässt.
- Die Synchronisation in HashTable macht es im Vergleich zu HashMap langsamer, macht aber auch das Schreiben von zusätzlichem Code zum Erhalten der Synchronisation überflüssig.
- HashTable verwendet separate Verkettung (mit verknüpften Listen) als Kollisionsbehandlungsstrategie, die die Suchzeit von O(n) begrenzt.
- Der Enumerator ist nicht ausfallsicher. Wenn die HashTable während des Traversierens geändert wird, wird kein Fehler ausgegeben.
- HashTable behält die Einfügereihenfolge in Java nicht bei.
- Die Standardkapazität von HashTable ist 11.
Unterschied zwischen HashMap und HashTable in Tabellenform
VERGLEICHSGRUNDLAGE | HASHMAP | HASH-TABELLE |
Beschreibung | HashMap ist die erweiterte Version von HashTable und wurde als neue Klasse in JDK 1.2 eingeführt. Es ist ein Teil von Java Collections. | HashTable ist eine Legacy-Klasse und wurde vor HashMap eingeführt, sie war nicht Teil der ursprünglichen Java-Sammlungen. |
Funktion | Es implementiert Map und Serializable-Schnittstelle. | Es implementiert den Sammlungsrahmen. |
Synchronisation | Die Synchronisierung ist in HashMap nicht implementiert und ist nicht Thread-sicher. Daher kann sie ohne ordnungsgemäße Synchronisierung nicht von vielen Threads gemeinsam genutzt werden. | Die Synchronisierung ist in HashMap nicht implementiert und ist nicht Thread-sicher. Daher kann sie ohne ordnungsgemäße Synchronisierung nicht von vielen Threads gemeinsam genutzt werden. |
Nachlass | HashMap erbt die Klasse AbstractMap. | HashTable erbt die Dictionary-Klasse. |
Durchquerung von Werten | HashMap stellt Iterator für seine Iteration bereit, um die darin gespeicherten Werte zu durchlaufen. | Iterator HashTable stellt auch Enumerator bereit, um die darin gespeicherten Werte zu durchlaufen. |
Interne Implementierung | Die interne Implementierung beider Klassen ist bis zu einem gewissen Grad gleich. Im Fall von HashMap sind jedoch ein Nullschlüssel und mehrere Nullwerte zulässig. | HashTable ist intern so implementiert, dass es keinen NULL-Schlüssel oder NULL-Wert zulässt. |
Geschwindigkeit | Aufgrund der fehlenden Synchronisierung ist HashMap im Vergleich zu HashTable schneller und wird bevorzugt, wenn keine Synchronisierung erforderlich ist. | Die Synchronisation in HashTable macht es im Vergleich zu HashMap langsamer, macht aber auch das Schreiben von zusätzlichem Code zum Erhalten der Synchronisation überflüssig. |
Begrenzende Suchzeit | HashMap verwendet einen ausgeglichenen Baum als Kollisionsauflösungsstrategie, der eine begrenzende Suchzeit von O(log n) hat. | HashTable verwendet separate Verkettung (mit verknüpften Listen) als Kollisionsbehandlungsstrategie, die die Suchzeit von O(n) begrenzt. |
Ausnahme bei gleichzeitiger Änderung | Iterator ist fehlerschnell und löst eine gleichzeitige Änderungsausnahme aus, wenn ein anderer Thread versucht, die Map zu ändern. | Der Enumerator ist nicht ausfallsicher. Wenn die HashTable während des Traversierens geändert wird, wird kein Fehler ausgegeben. |
Anzeigenauftrag | HashMap behält die Einfügereihenfolge in Java nicht bei. | HashTable behält die Einfügereihenfolge in Java nicht bei. |
Standardkapazität | Die Standardkapazität einer HashTable in der HashMap-Klasse beträgt 16. | Die Standardkapazität von HashTable ist 11. |