Unterschied zwischen HashMap und Hashtable

Das Java Collections-Framework stellt eine Reihe von Collection-Klassen bereit. Jede Klasse hat ihre eigenen Leistungsstärken und Schwächen. Einige Klassen bieten vollständige Implementierungen, die unverändert verwendet werden können. Andere sind abstrakt und stellen skelettartige Implementierungen bereit, die als Ausgangspunkt für das Erstellen von Sammlungen dienen. Die Erfassungsimplementierungen verwenden das synchronized-wrapper-Framework, um synchronisierte Klassen bereitzustellen. Andernfalls sind die Implementierungen nicht synchronisiert. Mehrere Klassen stellen Implementierungen der Kartenschnittstelle bereit.

Die Java-Plattform enthält drei allgemeine Map-Implementierungen: HashMap, TreeMap und LinkedHashMap. HashMap und Hashtable sind zwei Sammlungen in Java, in denen Schlüssel / Wert-Paare in einer Hash-Tabelle gespeichert werden. Hashtable ist eine synchronisierte Map und HashMap ist eine nicht synchronisierte Map. Wenn Sie jedoch eine synchronisierte Map verwenden müssen, ist eine Hashtable schneller als die Verwendung einer HashMap in einem synchronisierten Wrapper. Bei beiden handelt es sich um Hash-basierte Sammlungen in Java, die jedoch durchaus unterschiedliche Unterschiede aufweisen. Wir heben einige wichtige Unterschiede zwischen den beiden hervor, damit Sie die Begriffe besser verstehen können.

Was ist HashMap??

HashMap ist eine Map-Implementierung basierend auf einer Hashtabelle, die eine konstante Leistung für das Einfügen und Suchen von Paaren bietet. Die HashMap-Klasse stellt eine Kartenimplementierung bereit, die auf einer Hashtable-Datenstruktur basiert. Diese Implementierung unterstützt alle Map-Vorgänge und ermöglicht mehrere Nullwerte, aber nur einen Nullschlüssel. Es verwendet Schlüssel / Wert-Paare, um Werte in einer Hashtabelle zu speichern. Es handelt sich um eine nicht synchronisierte Map. Dies bedeutet, dass sie nicht threadsicher ist und nicht ohne korrekte Synchronisierung von mehreren Threads gemeinsam genutzt werden kann.

Was ist Hashtable??

Im Gegensatz zu HashMap ist Hashtable eine synchronisierte Map und ist Thread-sicher, was bedeutet, dass sie von mehreren Threads gemeinsam genutzt werden kann. In Hashtable geben Sie ein Objekt an, das als Schlüssel verwendet werden kann, und den Wert, der zum Schlüssel gehört. Ein Hashtable ordnet Schlüssel mithilfe einer Hash-Funktion Werten zu. Java stellt diese Funktion in Form der hashcode () - Methode von Object zur Verfügung, die von Klassen überschrieben wird, um entsprechende Hash-Codes bereitzustellen. Im Gegensatz zu HashMap unterstützt Hashtable keine Nullwerte und Nullschlüssel, da in der Put-Methodenimplementierung von Hashtable eine Nullprüfung erfolgt.

Unterschied zwischen HashMap und Hashtable

  1. Grundlagen von HashMap Vs. Hash-tabelle

Beide sind Hash-basierte Sammlungen in Java, die zum Speichern von Daten in Schlüssel / Wert-Paaren verwendet werden. HashMap ist eine Map-Implementierung basierend auf einer Hashtabelle, die eine konstante Leistung für das Einfügen und Suchen von Paaren bietet. Die Leistung kann mithilfe von Konstruktoren angepasst werden, mit denen Sie die Kapazität und den Lastfaktor der Hashtabelle einstellen können. Die grundlegende Hashtabelle ist der HashMap ziemlich ähnlich, selbst wenn die Methodennamen nach unten verschoben werden. Es speichert das Schlüssel / Wert-Paar in der Hash-Tabelle. In Hashtable geben Sie ein Objekt an, das als Schlüssel verwendet werden kann, und den Wert, der zum Schlüssel gehört.

  1. Synchronisation von HashMap Vs. Hash-tabelle

Sowohl HashMap als auch Hashtable verwenden Hashtechniken, um Werte basierend auf dem Schlüssel zu speichern. Wie HashMap verwendet Hashtable Schlüssel / Wert-Paare, um Werte in einer Hash-Tabelle zu speichern. Der Hauptunterschied zwischen den beiden ist jedoch die Synchronisation. HashMap ist eine nicht synchronisierte Map, während Hashtable eine synchronisierte Map ist. Dies bedeutet, dass HashMap nicht threadsicher ist und nicht von mehreren Threads ohne richtigen Synchronisationscode gemeinsam genutzt werden kann. Im Gegensatz dazu ist Hashtable Thread-sicher und kann von mehreren Threads gemeinsam genutzt werden. Hashtable ist schneller als die Verwendung einer HashMap in einem synchronisierten Wrapper, wenn Sie eine synchronisierte Map verwenden müssen.

  1. NULL-Schlüssel und NULL-Werte für HashMap Vs. Hash-tabelle

Die HashMap-Klasse stellt eine Kartenimplementierung bereit, die auf einer Hashtable-Datenstruktur basiert. Diese Implementierung unterstützt alle Map-Vorgänge und erlaubt mehrere Nullwerte, aber nur einen Nullschlüssel, sodass eindeutige Schlüsseleigenschaften beibehalten werden können. Es kann jedoch nicht garantiert werden, in welcher Reihenfolge die Einträge gespeichert werden. Die Hashtabelle hingegen ordnet Schlüssel mithilfe einer Hash-Funktion Werten zu. Im Gegensatz zu HashMap unterstützt Hashtable keine Nullwerte und Nullschlüssel, da in der Put-Methodenimplementierung von Hashtable eine Nullprüfung erfolgt.

  1. Leistung von HashMap Vs. Hash-tabelle

Da HashMap keine synchronisierte Map ist, ist sie in Bezug auf die Leistung viel schneller und besser als eine Hashtable und verbraucht tatsächlich weniger Speicher als Hashtable. Obwohl sie praktisch identisch sind, ist Hashtable etwas langsamer als eine HashMap, aber schneller als eine synchronisierte HashMap. Grundsätzlich ist die Verwendung von Hashtable mit Multithread-Zugriff nicht sicher, da nur die Methoden synchronisiert werden. Hashtable ist das synchronisierte Gegenstück zu HashMap. Nicht synchronisierte Objekte weisen im Vergleich zu synchronisierten Objekten eine bessere Leistung auf, wie eine Hashtable in einer Umgebung mit nur einem Thread.

HashMap vs. Hashtable: Vergleichstabelle

 

Zusammenfassung von HashMap Vs. Hash-tabelle

Die HashMap-Klasse gibt Ihnen eine unsortierte, ungeordnete Map. Wenn Sie also eine Map benötigen und sich nicht für die Reihenfolge interessieren, in der die Einträge gespeichert werden, ist HashMap der richtige Weg.

Hashtable war genau wie Vector aus prähistorischer Java-Zeit. Genauso wie Vector ein synchronisiertes Gegenstück zur moderneren und erweiterten ArrayList ist, ist Hashtable das synchronisierte Gegenstück zu HashMap. Eine Klasse kann jedoch nicht synchronisiert werden. Wenn wir also sagen, dass Hashtable eine synchronisierte Map ist, bedeutet dies, dass die Schlüsselmethoden der Klasse synchronisiert sind. 

Obwohl beide praktisch identisch sind, liegt der Unterschied in der Art und Weise, wie sie synchronisiert werden und wie sie funktionieren. HashMap ist in einer Umgebung mit mehreren Threads besser, wohingegen Hashtable in einer Umgebung mit einem einzelnen Thread besser ist.