Unterschied zwischen HashMap und Hashtable in Java

Autor: Laura McKinney
Erstelldatum: 2 April 2021
Aktualisierungsdatum: 5 Kann 2024
Anonim
14.11 HashMap and HashTable in Java
Video: 14.11 HashMap and HashTable in Java

Inhalt


Die HashMap und die Hashtable werden beide verwendet, um a darzustellen Gruppe von Objekten das sind vertreten in Paar. Jeder Paar heißt Eintrag Objekt. Das Sammlung of Entries wird vom Objekt von HashMap und Hashtable referenziert. Schlüssel in einer Sammlung müssen eindeutig oder unterscheidbar sein. Der Unterschied zwischen HashMap und Hashtable besteht darin, dass HashMap implementiert insbesondere die Kartenschnittstelle, während die Hash-tabelle erweitert die Dictionary-Klasse (Legacy-Klasse), die für die Implementierung der Map-Schnittstelle überarbeitet wurde. Der andere wichtige Unterschied ist, dass es sich bei den Objekten von HashMap um handelt nicht synchronisiert während die Objekte von Hashtable ist synchronisiert.

Sehen wir uns die unten gezeigte Vergleichstabelle an, um weitere Unterschiede zwischen HashMap und Hashtable zu erfahren.


  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Ähnlichkeiten
  5. Fazit

Vergleichstabelle

Grundlage für den VergleichHashMapHash-tabelle
Implementieren / ErweiternDie HashMap-Klasse implementiert die Map-Schnittstelle und erweitert eine AbstractMap-Klasse.Die Hashtable-Erweiterung der Dictionary Legacy-Klasse wurde jedoch überarbeitet und implementiert jetzt auch die Kartenschnittstelle.
SynchronisationHashMap ist nicht synchronisiert und daher ist das HashMap-Objekt nicht threadsicher.Hashtable ist synchronisiert und daher ist das Objekt von Hashtable threadsicher.
Schlüssel / WertEin Schlüssel kann den Nullwert nur einmal zurückgeben, ein Wert kann jedoch beliebig oft den Nullwert zurückgeben.Ein Schlüssel kann nicht Null zurückgeben, da er zum Abrufen des Hash-Codes verwendet wird, der als Index für die Hash-Tabelle verwendet wird, und ein Wert kann auch Null zurückgeben.
Standard-AnfangskapazitätDie Standard-Anfangskapazität von HashMap ist 16.Die Standard-Anfangskapazität von Hashtable ist 11.
ÜberquerenHashMap wird von Iterator durchlaufen.Wie die Map-Klasse unterstützt auch Hashtable Iterator nicht direkt zum Durchlaufen und verwendet daher Enumerator.


Definition von HashMap

HashMap ist eine Klasse, die das implementiert Karte Schnittstelle und erweitert die AbstractMap Klasse verwendet die Hash-Tabelle. Das HashMap-Objekt verweist auf eine Sammlung / einen Satz von Paar, bei dem jede Taste einem bestimmten Wert zugeordnet ist. Schlüssel in einer Sammlung müssen eindeutig sein, da sie zum Abrufen des Werts verwendet werden. Andererseits können die Werte in einer Sammlung dupliziert werden. Die Deklaration der HashMap-Klasse und die Konstruktoren der HashMap-Klasse lauten wie folgt:

/ * K steht für den Schlüssel und V für den Wert * / class HashMap / * Konstruktoren der HashMap-Klasse * / HashMap () HashMap (Map <? Erweitert K,? Erweitert V> m) HashMap (int capacity) HashMap (int capacity, float fillRatio)

Der erste Konstruktor ist ein Standardkonstruktor, der ein leeres Objekt von HashMap mit einer Standardkapazität von 16 und einem Standardfüllungsgrad von 0,75 initialisiert. Der zweite Konstruktor initialisiert die Hash-Map mit dem Wert von m. Der dritte Konstruktor erstellt eine Hash-Map mit der Anfangskapazität, die dem im Argument „capacity“ angegebenen Wert entspricht. Der vierte Konstruktor initialisiert die Hash-Map mit einer Kapazität und einem Füllungsgrad, die in den Parametern angegeben sind. Lassen Sie uns nun lernen, wie Sie die Einträge in einer Hash-Map füttern.

Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Im obigen Code können Sie sehen, dass ich ein leeres HashMap-Objekt erstellt habe Hm mit voreingestellter Anfangskapazität und voreingestellter Füllrate. Dann habe ich vier Einträge mit der put (K, V) -Methode in die Hash-Map eingefügt, die den Schlüssel dem Wert zuordnet. Sie können feststellen, dass die Einträge nicht in der Reihenfolge bearbeitet werden, in der Sie sie eingeben, da die Reihenfolge der Einfügungen nicht festgelegt ist. Angenommen, Sie haben bereits einen Eintrag in der Hash-Map und danach versuchen Sie put (K1, V5) einzufügen, d. h. Sie versuchen, denselben Schlüssel mit einem anderen Wert zuzuordnen. Die put-Methode ersetzt dann den alten Wert V1 durch den neuen Wert V2 und gibt den alten Wert V1 zurück. Andernfalls gibt die put-Methode für diesen Schlüssel Null zurück, wenn wir nie versuchen, den Wert eines Schlüssels zu ersetzen.

Definition von Hashtable

Hashtable ist eine Klasse, die das erweitert Wörterbuch Klasse, die eine Legacy-Klasse ist und überarbeitet wurde, um das zu implementieren Karte Schnittstelle. Die Hashtabelle verwendet die Hash-Tabelle als Datenstruktur. Die Hashtable ähnelt der HashMap, da sich hier auch das Objekt von Hashtable auf die Sammlung von Einträgen bezieht, bei denen jeder Eintrag ein Paar von Einträgen ist . Alle Schlüssel in einer Sammlung müssen eindeutig sein, andererseits können die Werte dupliziert werden. Die Schlüssel werden insbesondere verwendet, um den Hash-Code-Wert zu erhalten, der den Index bestimmt, bei dem der Paar wird in einer Hash-Tabelle gespeichert. In einer Hash-Tabelle können weder ein Schlüssel noch ein Wert einen Nullzeiger zurückgeben. Sehen wir uns die Deklaration der Hashtable-Klasse und die Konstruktoren der Hashtable-Klasse an.

/ * K gibt den Schlüssel und V den Wert an, der dem Schlüssel * / class Hashtable zugeordnet ist / * Konstruktoren von Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? erweitert K,? erweitert V> m)

Im obigen Code ist der erste Konstruktor ein Standardkonstruktor, der ein leeres Objekt einer Klasse Hashtable erstellt. Die Standardgröße beträgt 11 und der Standardfüllungsgrad 0,75. Der zweite Konstruktor erstellt eine Hash-Tabelle mit der Größe, die dem im Parameter „size“ angegebenen Wert entspricht. Der dritte Konstruktor erstellt eine Hash-Tabelle mit einer Größe und einem Füllgrad, die im Parameter angegeben sind. Der vierte Konstruktor initialisiert die Hash-Tabelle mit dem Wert m. Lassen Sie uns jetzt lernen, wie man das einfügt Paar in der Hash-Tabelle.

Hashtable ht = new Hashtable (); ht.put (neuer hashCode (2), 275); ht.put (neuer hashCode (12), 250); ht.put (neuer hashCode (16), 150); ht.put (neuer hashCode (8), 200); System.out.ln (ht); / * output * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Im obigen Code habe ich ein leeres Objekt von Hashtable erstellt und vier Einträge mit der put () -Methode eingefügt. Innerhalb der put-Methode habe ich hashCode () aufgerufen, die den Hashcode-Wert berechnet und zurückgibt, der als Indexwert für das Eintragsobjekt fungiert. Wie Sie sehen, habe ich die Größe der Hash-Tabelle nicht erwähnt, sodass sie standardmäßig 11 ist. Auch hier wird die Einfügereihenfolge nicht beibehalten, und wenn ed-Einträge nicht in der Reihenfolge angezeigt wurden, wurden sie eingespeist.

  1. Die HashMap implementiert Karte Schnittstelle und erweitert eine abstrakte Klasse, AbstractMap wohingegen die Hashtabelle die abstrakte Klasse erweitert Wörterbuch, die auch eine Legacy-Klasse ist, später überarbeitet, um zu implementieren Karte Schnittstelle.
  2. Das HashMap-Objekt ist nicht synchronisiert d.h. mehrere Threads können gleichzeitig darauf arbeiten und daher Objekte, die nicht threadsicher sind. Auf der anderen Seite befinden sich die Objekte von Hashtable synchronisiert d. h., wenn ein Thread ein Objekt von Hashtable bearbeiten möchte, muss er eine Sperre für dieses Objekt erwerben, damit kein anderer Thread auf dieses Objekt zugreifen kann, und daher ist er thread-sicher.
  3. In HashMap kann der Schlüssel zurückkehren NULL nur einmal, und value können zurückkehren Mehrmals null. Andererseits kann ein Schlüssel niemals Null zurückgeben, da er zum Abrufen des Hash-Code-Werts verwendet wird, der als Index zum Speichern des verwendet wird Paar und noch ein Wert kann Null zurückgeben.
  4. Die Standardkapazität einer Hash-Tabelle in der HashMap-Klasse ist 16 Die Standardkapazität einer Hash-Tabelle in Hashtable ist 11.
  5. Das Iterator kann Hashmap-Einträge überqueren. Andererseits unterstützt die Hashtabelle den Iterator nicht direkt und daher im Allgemeinen Enumerator wird zum Durchlaufen der Einträge in Hashtable verwendet.

Ähnlichkeiten:

  • HashMap und Hashtable verwenden beide die Datenstruktur des Hash-tabelle.
  • HashMap und Hashtable implementiert beide Karte Schnittstelle
  • Die Einfügereihenfolge wird nicht beibehalten in sowohl HashMap als auch Hashtable und basierend auf dem Hash-Code, der mit Schlüsseln erhalten wurde.
  • In HashMap und Hashtable müssen Schlüssel sein einzigartig wohingegen die Werte sein können dupliziert.
  • HashMap und Hashtable können beide enthalten heterogene Objekte für beide Schlüssel und Werte.
  • HashMap und Hashtable, beide implementiert Serialisierbar und Klonbar Schnittstellen aber nicht, wahlfreier Zugriff.
  • HashMap und Hashtable haben beide einen Standardfüllungsgrad 0.75.
  • HashMap und Hashtable eignen sich am besten zum Abrufen von oder suche Operationen.

Fazit:

HashMap weist eine bessere Leistung auf, da seine Objekte nicht synchronisiert sind und mehrere Threads gleichzeitig darauf zugreifen können. Daher ist es schneller als Hashtable.