1. Der Unterschied zwischen Hashmap und Hashtable
Schauen wir uns zunächst die Definition von zwei Klassen an
öffentliche Klasse Hashtable erweitert Wörterbuch implementiert, klonbar, java.io.serializable
öffentliche Klasse HashMap erweitert AbstractMap implementiert MAP, klonbar, serialisierbar
Es ist zu sehen, dass Hashtable Erben von Wörterbuch und Hashmap von AbstractMap erbt
Die Put -Methode von Hashtable ist wie folgt
public synchronized v put (k key, v value) {// ############ANMERKUNG HIER 1 // Stellen Sie sicher, dass der Wert nicht null ist, wenn (value == null) {// ########reichen hier 2 werfen nulpoInterexception (); } // Stellen Sie sicher, dass der Schlüssel nicht bereits im Hashtable ist. Registerkarte Eingabe [] = Tabelle; int hash = key.hashCode (); // ######## ANMERKUNG HIER hier 3 int Index = (Hash & 0x7fffffffff) % Tab.length; für (Eintrag e = tab [index]; e! = null; e = E.Next) {if ((e.hash == Hash) && e.Key.equals (Schlüssel)) {v old = e.Value; E. value = Wert; Alt zurückkehren; }} modcount ++; if (count> = threshold) {// die Tabelle neu auferlegen, wenn der Schwellenwert überschritten wird. Tab = Tabelle; Index = (Hash & 0x7fffffff) % Tab.Length; } // erstellt den neuen Eintrag. Eintrag E = Tab [Index]; Tab [index] = neuer Eintrag (Hash, Schlüssel, Wert, e); zählen ++; null zurückkehren; } Hinweis 1 Die Methode ist synchron
Anmerkung 2 Methode zulässt Value == NULL nicht
Hinweis 3 Die Methode ruft die HashCode -Methode des Schlüssels auf. Wenn Key == NULL, wird eine Null -Zeiger -Ausnahme ausgeworfen. Die Put -Methode von HashMap lautet wie folgt.
public v put (k key, v value) {// ############hier 1 if (key == null) // ######### hier 2 return putFornullKey (Wert); int hash = hash (key.hashcode ()); int i = indexFor (Hash, Tabelle.length); für (Eintrag e = Tabelle [i]; e! = null; e = e.next) {Objekt k; if (e.hash == Hash && ((k = E.Key) == Key || key.equals (k))) {v oldValue = e.Value; E. value = Wert; E. recordaccess (this); kehren Sie OldValue zurück; }} modcount ++; AddEntry (Hash, Schlüssel, Wert, i); // ######## hier return null; } Hinweis 1 Die Methode ist asynchron
Anmerkung 2 Methode Ermöglicht Key == NULL
Anmerkung 3 Die Methode trifft keine Aufrufe zum Wert, daher darf sie null sein.
Wieder auffüllen:
Hashtable hat eine Methode enthält, die leicht zu Missverständnissen führen kann, sodass es in HashMap entfernt wurde.
Natürlich verwenden beide Klassen den enthaltenden Kesch und enthält Methoden.
| Hashmap | Hashtable | |
| Elternklasse | AbstractMap | Wörterbuch |
| Ist es synchronisiert | NEIN | Ja |
| k, kann v null | Ja | NEIN |
HashMap ist eine leichte Implementierung von Hashtable (nicht threadsafe Implementierung). Sie alle vervollständigen die Kartenschnittstelle. Der Hauptunterschied besteht darin, dass HashMap Nullschlüssel zulässt. Aufgrund von Nicht-Thread-Safe kann es effizienter als Hashtable sein.
HashMap ermöglicht Null als Schlüssel oder Wert eines Eintrags, während Hashtable dies nicht tut.
HashMap entfernt den Hashtable enthält die Methode und ändert es in enthält Wert und enthält. Weil die entsprechende Methode leicht zu Missverständnissen zu führen ist.
Hashtable -Erben aus der Wörterbuchklasse und HashMap ist eine Implementierung der von Java 1.2 eingeführten Kartenschnittstelle.
Der größte Unterschied besteht darin, dass die Hashtable -Methode synchronisiert ist, während Hashmap nicht der Fall ist. Wenn mehrere Threads auf Hashtable zugreifen, müssen sie nicht für seine Methoden selbst synchronisieren, und HashMap muss eine externe Synchronisation liefern (Collections.SynchronizedMap).
Die von Hashtable und HashMap verwendeten Hash/Rehash -Algorithmen sind ungefähr gleich, sodass es keinen großen Unterschied in der Leistung geben wird.
Zusammenfassen:
Schlüsselwerte in HashMap dürfen leer sein und asynchron sind
Der Schlüsselwert für Hashtable dürfte nicht null sein und synchronisiert ist
Die Vererbung ist unterschiedlich, aber beide implementieren die Kartenschnittstelle
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.