4318 Stimmen

Was sind die Unterschiede zwischen einer HashMap und einer Hashtable in Java?

Was sind die Unterschiede zwischen einer HashMap und eine Hashtable in Java?

Was ist effizienter für Nicht-Thread-Anwendungen?

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 durch ConcurrentHashMap Daher gilt sie im Allgemeinen als im Ruhestand befindlich. Es wird allgemein empfohlen, zwischen HashMap o ConcurrentHashMap ." Und ich halte das für eine vernünftige Bemerkung, wenn sie es denn so gemeint hat.

151voto

pierrotlefou Punkte 38013

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.

enter image description here

118voto

roottraveller Punkte 7134

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

  1. HashMap nicht synchronisiert ist. Es ist nicht Thread-sicher und kann nicht von vielen Threads ohne geeigneten Synchronisationscode gemeinsam genutzt werden.
  2. HashMap erlaubt einen Nullschlüssel und mehrere Nullwerte.
  3. HashMap ist eine neue Klasse, die im JDK 1.2 eingeführt wurde.
  4. HashMap ist schnell.
  5. Wir können die HashMap als synchronisiert, indem dieser Code aufgerufen wird
    Map m = Collections.synchronizedMap(HashMap);
  6. HashMap wird von Iterator durchlaufen.
  7. Iterator in HashMap ist ausfallssicher.
  8. HashMap erbt die AbstractMap-Klasse.

Hashtabelle

  1. Hashtable synchronisiert ist. Es ist thread-sicher und kann mit vielen Threads geteilt werden.
  2. Hashtable erlaubt keine Nullschlüssel oder -werte.
  3. Hashtable ist eine Legacy-Klasse.
  4. Hashtable ist langsam.
  5. Hashtable ist intern synchronisiert und kann nicht unsynchronisiert werden.
  6. Hashtable wird von Enumerator und Iterator durchlaufen.
  7. Zähler in Hashtable ist nicht ausfallsicher.
  8. Hashtable erbt die Klasse Dictionary.

Weitere Lektüre Was ist der Unterschied zwischen HashMap und Hashtable in Java?

enter image description here

0 Stimmen

Warum sagst du ~" Hashtable ist eine Legacy-Klasse "? Wo sind die Belege dafür?

0 Stimmen

Die Pflege der HashMap ist kostspieliger als die der TreeMap. Weil HashMap unnötige zusätzliche Buckets erstellt.

0 Stimmen

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.

80voto

Sujan Punkte 1492

Schauen Sie sich dieses Diagramm an. Sie bietet Vergleiche zwischen verschiedenen Datenstrukturen zusammen mit HashMap y Hashtable . Der Vergleich ist präzise, klar und leicht zu verstehen.

Java-Sammelmatrix

76voto

matt b Punkte 135206

Zusätzlich zu dem, was izb sagte, HashMap erlaubt Nullwerte, während die Hashtable nicht.

Beachten Sie auch, dass Hashtable erweitert die Dictionary Klasse, die als die Javadocs ist veraltet und wurde ersetzt durch die Map Schnittstelle.

59voto

Miles D Punkte 7730

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.com

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.

Powered by:

X