Was sind die Unterschiede zwischen einer HashMap
und eine Hashtable
in Java?
Was ist effizienter für Nicht-Thread-Anwendungen?
Bitte beachten Sie, dass HashTable
war eine Legacy-Klasse, bevor Java Collections Framework (JCF) eingeführt wurde, und wurde später nachgerüstet, um die Map
Schnittstelle. So wurde Vector
y Stack
.
Halten Sie sich daher in neuem Code immer von ihnen fern, da es in der JCF immer bessere Alternativen gibt. wie andere darauf hingewiesen hatten.
Hier ist die Java-Sammelspickzettel die Sie nützlich finden werden. Beachten Sie, dass der graue Block die Legacy-Klassen HashTable, Vector und Stack enthält.
Es sind bereits viele gute Antworten gepostet worden. Ich füge ein paar neue Punkte hinzu und fasse sie zusammen.
HashMap
y Hashtable
beide werden verwendet, um zu speichern Daten in Form von Schlüsseln und Werten . Beide verwenden Hashing-Technik, um eindeutige Schlüssel zu speichern. Es gibt jedoch viele Unterschiede zwischen den Klassen HashMap und Hashtable, die im Folgenden beschrieben werden.
HashMap
HashMap
nicht synchronisiert ist. Es ist nicht Thread-sicher und kann nicht von vielen Threads ohne geeigneten Synchronisationscode gemeinsam genutzt werden.HashMap
erlaubt einen Nullschlüssel und mehrere Nullwerte.HashMap
ist eine neue Klasse, die im JDK 1.2 eingeführt wurde.HashMap
ist schnell.HashMap
als synchronisiert, indem dieser Code aufgerufen wirdMap m = Collections.synchronizedMap(HashMap);
HashMap
wird von Iterator durchlaufen.HashMap
ist ausfallssicher.HashMap
erbt die AbstractMap-Klasse.Hashtabelle
Hashtable
synchronisiert ist. Es ist thread-sicher und kann mit vielen Threads geteilt werden.Hashtable
erlaubt keine Nullschlüssel oder -werte.Hashtable
ist eine Legacy-Klasse.Hashtable
ist langsam.Hashtable
ist intern synchronisiert und kann nicht unsynchronisiert werden.Hashtable
wird von Enumerator und Iterator durchlaufen.Hashtable
ist nicht ausfallsicher.Hashtable
erbt die Klasse Dictionary.Weitere Lektüre Was ist der Unterschied zwischen HashMap und Hashtable in Java?
Die Pflege der HashMap ist kostspieliger als die der TreeMap. Weil HashMap unnötige zusätzliche Buckets erstellt.
Eine LinkedHashMap hat eine doppelt verknüpfte Liste von Einträgen, nicht von Buckets. Buckets sind über Array-Indizes zugänglich und müssen nicht verknüpft sein.
Hashtable
ist ähnlich wie die HashMap
und hat eine ähnliche Schnittstelle. Es wird empfohlen, dass Sie HashMap
Es sei denn, Sie benötigen Unterstützung für ältere Anwendungen oder Sie brauchen eine Synchronisierung, da die Hashtables
Methoden synchronisiert sind. Also in Ihrem Fall, wie Sie nicht Multi-Threading sind, HashMaps
sind Ihre beste Wahl.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
45 Stimmen
HashTable ist in Java 1.7 veraltet und es wird empfohlen, die Implementierung von ConcurrentMap zu verwenden
9 Stimmen
@MissFiona Nein,
ConcurrentMap
es no notwendig, da in der Frage von "Nicht-Thread-Anwendungen" die Rede ist, was bedeutet, dass Threading/Concurrency kein Thema ist.9 Stimmen
@BasilBourque, Ja, aber ich glaube, was MissFiona damit meinte, war so etwas wie "
HashTable
wurde traditionell nur wegen seines partiellen Threading-Schutzes gewählt. Aber das wurde durchConcurrentHashMap
Daher gilt sie im Allgemeinen als im Ruhestand befindlich. Es wird allgemein empfohlen, zwischenHashMap
oConcurrentHashMap
." Und ich halte das für eine vernünftige Bemerkung, wenn sie es denn so gemeint hat.1 Stimmen
Nach Angaben von doi.org/10.48550/arXiv.1602.00984 Hashtable ist sowohl im Hinblick auf den Energieverbrauch als auch auf die Ausführungszeit effizienter als HashMap.