Wenn Sie eine neue Computersprache erlernen, fragen Sie in erster Linie, wie Sie mit großen Datengruppen arbeiten. Dieses Thema wird häufig unter dem Thema „Datenstrukturen“ behandelt. Wenn Sie tiefer graben, müssen Sie mit Themen wie verknüpften Listen, Warteschlangen, Stapeln und binären Bäumen zwischen vielen anderen Datenstrukturen umgehen. In Java sind diese Strukturen Teil des Java Collections Framework. Eine Auflistung ist nichts anderes als eine Art Datenstruktur, die sich auf eine Gruppierung mehrerer Datenelemente bezieht, und das Java Collections Framework standardisiert die Art und Weise, wie diese Objektgruppen behandelt werden. Tatsächlich wurde das Kollektionssystem so konzipiert, dass es mehrere Ziele erreicht.
Das gesamte Kollektions-Framework basiert auf einer Reihe von Standardschnittstellen. Einige Standardimplementierungen wie LinkedList, HashSet und TreeSet werden von diesen Schnittstellen bereitgestellt, die Sie möglicherweise unverändert lassen. Darüber hinaus können Sie bei Bedarf auch eine eigene Sammlung implementieren. Neben den Sammlungen definiert das Framework jedoch mehrere Kartenschnittstellen und Klassen. Java enthält drei allgemeine Kartenimplementierungen - HashMap, TreeMap und LinkedHashMap -, die Schlüssel / Wert-Paare speichern. Karten sind zwar keine technischen Sammlungen, sie sind jedoch vollständig in Sammlungen integriert. Tatsächlich konzentrieren sich Karten auf Assoziationsgruppen zwischen Objekten. Dieser Artikel fasst die wichtigsten Unterschiede zwischen HashMap und HashSet zusammen.
HashMap ist die am häufigsten verwendete Implementierung der Map-Schnittstelle, die eine grundlegende Schlüssel- / Wert-Map bietet, bei der die Elemente ungeordnet sind. Anstelle einer langsamen Suche des Schlüssels wird ein spezieller Wert namens Hash-Code verwendet. Der Hash-Code ist eine Möglichkeit, Informationen in dem fraglichen Objekt zu übernehmen und in ein relativ eindeutiges Int für dieses Objekt umzuwandeln. Es funktioniert einfach nach dem Hash-Prinzip, dh es verwendet eine Hash-Funktion, um identifizierende Werte abzubilden. Genau wie Vector und Stack in ArrayList und LinkedList ersetzt werden, hat Hashtable einen Ersatz in HashMap. Es erweitert AbstractMap, um die Map-Schnittstelle mithilfe einer internen Hashtable-Darstellung zu implementieren. Ähnlich wie bei anderen Universalimplementierungen unterstützt HashMap die optionalen Methoden von Map, lässt Nullwerte zu und ist nicht synchronisiert.
HashSet ist eines der Mitglieder des Java Collections Framework, das die Set-Schnittstelle implementiert, die von einer Hash-Tabelle unterstützt wird, bei der es sich tatsächlich um eine HashMap-Instanz handelt. Wie der Name schon sagt, wird er durch eine Hash-Tabelle implementiert, ein Array, in dem Elemente an einer Position gespeichert werden, die von ihrem Inhalt abgeleitet wird. Im Gegensatz zu einer Karte ist Set genau eine Sammlung mit genau derselben Benutzeroberfläche. Es gibt also keine zusätzliche Funktionalität wie bei zwei verschiedenen Listen. HashSet verwendet eine Hashfunktion, die speziell für die schnelle Suche entwickelt wurde. Es ist eine ungeordnete Sammlung eindeutiger Objekte, die keine doppelten Werte speichern können. HashSet erweitert die AbstractSet-Klasse, die die Set-Schnittstelle implementiert. HashSet definiert jedoch keine zusätzlichen Methoden außer denen, die von seinen Superklassen und Schnittstellen bereitgestellt werden.
HashMap ist die am häufigsten verwendete Implementierung der Map-Schnittstelle, die eine grundlegende Schlüssel- / Wert-Map bietet, bei der die Elemente ungeordnet sind. Es funktioniert einfach nach dem Hash-Prinzip, dh es verwendet eine Hash-Funktion, um identifizierende Werte abzubilden. HashSet dagegen ist eines der Mitglieder des Java Collections Framework, das die Set-Schnittstelle implementiert, die von einer Hashtabelle unterstützt wird, bei der es sich tatsächlich um eine HashMap-Instanz handelt. Einfach ausgedrückt, implementiert HashMap die Map-Schnittstelle, während HashSet die Set-Schnittstelle implementiert.
HashSet erstellt eine Auflistung, die eine Hashtabelle zum Speichern verwendet. In der Hash-Tabelle werden Informationen mit einer als Hashing bezeichneten Methode gespeichert. HashSet verwendet eine Hashfunktion, die speziell für die schnelle Suche zum Speichern von Elementen oder Werten entwickelt wurde. Die meisten HashSet-Funktionen werden durch die Superklasse AbstractCollection und AbstractSet bereitgestellt, die HashSet mit TreeSet gemeinsam nutzt. HashMap erweitert AbstractMap, um die Map-Schnittstelle mithilfe einer internen Hashtable-Darstellung zu implementieren. Beide Klassen sind nicht synchronisiert, dh sie sind nicht für den Thread-sicheren Betrieb geeignet.
Da Map keine doppelten Schlüssel unterstützt, erlaubt HashMap keine doppelten Schlüssel, es dürfen jedoch doppelte Werte vorhanden sein. Dies bedeutet, dass in HashMap doppelte Werte vorhanden sein können, aber Sie können die Erfassung als Wert für einen Schlüssel verwenden. Jeder Schlüssel muss in einer HashMap eindeutig sein, und ein einzelner Schlüssel darf nicht mehr als einen Wert haben. HashSet hingegen kann durch die bloße Definition eines Sets keine doppelten Elemente enthalten, was bedeutet, dass Sie keine doppelten Werte in HashSet speichern können. HashMap lässt nur einen Nullschlüssel zu, erlaubt jedoch eine beliebige Anzahl von Nullwerten, während HashSet nur einen Nullwert zulässt.
HashMap arbeitet nach dem Hash-Prinzip, dh es verwendet eine Hash-Funktion, um identifizierende Werte mithilfe des Hash-Algorithmus intern abzubilden, um ein einfaches Abrufen zu ermöglichen. Ein wahrer Hash-Mechanismus gibt immer den gleichen hashCode () zurück, wenn er auf dasselbe Objekt angewendet wird. HashSet hingegen verwendet intern HashMap als Hintergrunddatenstruktur, um Objekte hinzuzufügen oder zu speichern. Das heißt, wenn ein Objekt von HashSet erstellt wird, wird ein Objekt von HashMap erstellt.
Obwohl sowohl HashMap als auch HashSet nicht synchronisiert sind, was bedeutet, dass sie nicht für Thread-sichere Operationen geeignet sind und völlig unterschiedliche Konstrukte sind, bieten sie eine konstante Zeitleistung für grundlegende Operationen wie das Hinzufügen, Entfernen von Elementen usw. HashMap ist eine allgemeine Implementierung von Die Map-Schnittstelle, die Schlüssel / Wert-Paare speichert, ist HashSet eine Implementierung der Set-Schnittstelle. Ein HashSet verwendet eine HashMap, um die Implementierung zu sichern. Eine HashMap verwendet jedoch das Hashing-Prinzip und verwendet es, um schnell nach dem Schlüssel zu suchen.