HashSet
Was ist der Unterschied zwischen HashMap
und, abgesehen von der Tatsache, dass keine doppelten Werte zulässig sind HashSet
?
Ich meine Implementierung weise? Es ist ein bisschen vage, weil beide Hash-Tabellen verwenden , um Werte zu speichern.
java
collections
hashmap
hashset
SpikETidE
quelle
quelle
Antworten:
Sie sind ganz andere Konstrukte. A
HashMap
ist eine Implementierung vonMap
. Eine Karte ordnet Schlüssel Werten zu. Die Schlüsselsuche erfolgt mit dem Hash.Auf der anderen Seite ist a
HashSet
eine Implementierung vonSet
. Ein Set ist so konzipiert, dass es mit dem mathematischen Modell eines Sets übereinstimmt. AHashSet
verwendet aHashMap
, um seine Implementierung zu unterstützen, wie Sie bemerkt haben. Es wird jedoch eine völlig andere Schnittstelle implementiert.Wenn Sie nach dem Besten
Collection
für Ihre Zwecke suchen , ist dieses Tutorial ein guter Ausgangspunkt. Wenn Sie wirklich wissen wollen, was los ist, gibt es auch dafür ein Buch .quelle
HashSet ist eine Menge , zB {1,2,3,4,5}
HashMap ist eine Schlüssel -> Wert - Karte (Schlüssel zu Wert), z. B. {a -> 1, b -> 2, c -> 2, d -> 1}
Beachten Sie in meinem obigen Beispiel, dass es in der HashMap keine doppelten Schlüssel geben darf, aber möglicherweise doppelte Werte.
Im HashSet dürfen keine doppelten Elemente vorhanden sein.
quelle
HashSet
HashSet ist nicht synchronisiert, was bedeutet, dass sie erst dann für threadsichere Operationen geeignet sind, wenn sie explizit synchronisiert wurden. [Ähnlichkeit]
HashMap
HashMap ist nicht synchronisiert, was bedeutet, dass sie erst dann für threadsichere Vorgänge geeignet sind, wenn sie explizit synchronisiert wurden. [Ähnlichkeit]
Weitere Informationen finden Sie in diesem Artikel .
quelle
Es ist wirklich eine Schande, dass beide Namen mit Hash beginnen . Das ist der am wenigsten wichtige Teil von ihnen. Die wichtigen Teile kommen nach dem Hash - das Set und die Karte , wie andere betont haben. Was sie sind, sind jeweils ein Set - eine ungeordnete Sammlung - und eine Karte - eine Sammlung mit verschlüsseltem Zugriff. Sie werden zufällig mit Hashes implementiert - daher kommen die Namen -, aber ihre Essenz verbirgt sich hinter diesem Teil ihrer Namen.
Lassen Sie sich nicht durch ihre Namen verwirren. Sie sind zutiefst verschiedene Dinge.
quelle
Das
Hashset
intern implementiertHashMap
. Wenn Sie die interne Implementierung sehen, werden die in HashSet eingefügten Werte als Schlüssel in der HashMap gespeichert und der Wert ist ein Dummy-Objekt der Object-Klasse.Der Unterschied zwischen HashMap und HashSet ist: -
HashMap
enthält Schlüsselwertpaare und auf jeden Wert kann über einen Schlüssel zugegriffen werden, wobei HashSet jedes Mal iteriert werden muss, da es keine get-Methode gibt.HashMap
Implementiert die Map-Schnittstelle und erlaubt einen Nullwert als Schlüssel und mehrere Nullwerte als Werte. WennHashSet
die Set-Schnittstelle implementiert wird, erlaubt sie nur einen Nullwert und keine doppelten Werte. (Denken Sie daran, dass ein Nullschlüssel im HashMap-Schlüssel zulässig ist, daher ein Nullwert in HashSet wie HashSet HashMap intern implementiert).HashSet
undHashMap
behält die Reihenfolge des Einfügens während der Iteration nicht bei.quelle
Mit HashSet können wir Objekte in der Menge speichern, während wir mit HashMap Objekte auf der Basis von Schlüssel und Wert speichern können. Jedes Objekt oder gespeicherte Objekt hat einen Schlüssel.
quelle
Wie der Name schon sagt, ein HashMap ist ein assoziatives Karte (Mapping von einem Schlüssel auf einen Wert), ein HashSet nur ist Set .
quelle
Unterschiede zwischen HashSet und HashMap in Java
1) Der erste und wichtigste Unterschied zwischen HashMap und HashSet besteht darin, dass HashMap eine Implementierung der Map-Schnittstelle ist, während HashSet eine Implementierung der Set-Schnittstelle ist. Dies bedeutet, dass HashMap eine auf Schlüsselwerten basierende Datenstruktur ist und HashSet die Eindeutigkeit garantiert, indem keine Duplikate zugelassen werden Realität HashSet ist ein Wrapper um HashMap in Java. Wenn Sie sich die Code of Add (E e) -Methode von HashSet.java ansehen, sehen Sie folgenden Code:
Dabei ist das Einfügen des Objekts in die Karte als Schlüssel und Wert ein endgültiges PRESENT-Objekt, das Dummy ist.
2) Der zweite Unterschied zwischen HashMap und HashSet besteht darin, dass wir die add () -Methode verwenden, um Elemente in Set einzufügen, aber die put () -Methode, um Schlüssel und Wert in HashMap in Java einzufügen.
3) HashSet erlaubt nur einen Nullschlüssel, aber HashMap kann einen Nullschlüssel + mehrere Nullwerte zulassen.
Das hängt alles vom Unterschied zwischen HashSet und HashMap in Java ab. Zusammenfassend sind HashSet und HashMap zwei verschiedene Arten von Sammlungen, von denen eine festgelegt und die andere Map ist.
quelle
Unterschiede zwischen HashSet und HashMap in Java
HashSet verwendet HashMap intern zum Speichern von Objekten. Wenn die Methode add (String) aufgerufen wird, ruft sie die HahsMap-Methode put (Schlüssel, Wert) auf, wobei key = String object & value = new Object (Dummy). Daher werden keine Duplikate beibehalten, da Schlüssel nichts anderes als Value sind Objekt.
Die Objekte, die als Schlüssel in Hashset / HashMap gespeichert sind, sollten den Hashcode überschreiben und den Vertrag gleichsetzen.
Schlüssel, die zum Zugreifen auf / Speichern von Wertobjekten in HashMap verwendet werden, sollten als endgültig deklariert werden, da das Wertobjekt beim Ändern nicht gefunden werden kann und null zurückgibt.
quelle
A
HashMap
ist das Hinzufügen, Abrufen, Entfernen, ... von Objekten, die mit einem benutzerdefinierten Schlüssel eines beliebigen Typs indiziert sind.A
HashSet
besteht darin, Elemente hinzuzufügen, Elemente zu entfernen und zu überprüfen, ob Elemente vorhanden sind, indem ihre Hashes verglichen werden.Eine HashMap enthält also die Elemente und ein HashSet merkt sich ihre Hashes.
quelle
equals()
Methoden.Unterschiede: in Bezug auf die Hierarchie: HashSet implementiert Set. HashMap implementiert Map und speichert eine Zuordnung von Schlüsseln und Werten.
Eine Verwendung von HashSet und HashMap in Bezug auf die Datenbank würde Ihnen helfen, die Bedeutung der einzelnen zu verstehen.
HashSet: wird im Allgemeinen zum Speichern eindeutiger Sammlungsobjekte verwendet. Beispiel: Es kann als Implementierungsklasse zum Speichern von Viele-zu-Eins-Beziehungen zwischen verwendet werden
Klasse Item und Class Bid verwendet werden, wobei (Item hat viele Gebote) HashMap: wird verwendet, um einen Schlüssel dem Wert zuzuordnen. Der Wert kann null oder ein beliebiges Objekt sein / Liste des Objekts (welches Objekt an sich ist).
quelle
Ein HashSet wird als HashMap implementiert . Es ist eine Zuordnung zwischen dem Schlüssel und einem PRESENT-Objekt.
quelle
Ein HashSet verwendet eine HashMap intern, um seine Einträge zu speichern. Jeder Eintrag in der internen HashMap wird von einem einzelnen Objekt verschlüsselt, sodass alle Einträge in denselben Bucket gehasht werden. Ich erinnere mich nicht, was die interne HashMap zum Speichern ihrer Werte verwendet, aber es spielt keine Rolle, da dieser interne Container niemals doppelte Werte enthalten wird.
EDIT : Um Matthews Kommentar anzusprechen, hat er Recht; Ich hatte es rückwärts. Die interne HashMap ist mit den Objekten versehen, aus denen die Set-Elemente bestehen . Die Werte der HashMap sind ein Objekt, das einfach in den HashMap-Buckets gespeichert wird.
quelle
HashMap
ist eineMap
Implementierung, die doppelte Werte, aber keine doppelten Schlüssel zulässt. . Zum Hinzufügen eines Objekts ist ein Schlüssel / Wert-Paar erforderlich. Nullschlüssel und Nullwerte sind zulässig. z.B:HashSet
ist eineSet
Implementierung, die keine Duplikate zulässt. Wenn Sie versucht haben, ein doppeltes Objekt hinzuzufügen, einen Aufruf derpublic boolean add(Object o)
Methode, bleibt die Menge unverändert und kehrt zurückfalse
. z.B:quelle
Sie haben Ihre eigene Frage so ziemlich beantwortet - Hashset erlaubt keine doppelten Werte. Es wäre trivial, ein Hashset mithilfe einer Hintergrund-Hashmap zu erstellen (und nur zu überprüfen, ob der Wert bereits vorhanden ist). Ich denke, die verschiedenen Java-Implementierungen tun dies entweder oder implementieren einen benutzerdefinierten Code, um dies effizienter zu tun.
quelle
java.util.HashSet
sagt, dass dies durch a unterstützt wirdjava.util.HashMap
.Grundsätzlich muss der Benutzer in HashMap sowohl Schlüssel als auch Wert angeben, während in HashSet nur Wert angegeben wird. Der Schlüssel wird mithilfe der Hash-Funktion automatisch aus Wert abgeleitet. Nachdem sowohl Key als auch Value vorhanden sind, kann HashSet intern als HashMap gespeichert werden.
quelle
HashSet und HashMap speichern beide Paare. Der Unterschied besteht darin, dass Sie in HashMap einen Schlüssel angeben können, während der Schlüssel in HashSet aus dem Hashcode des Objekts stammt
quelle
HashMaps
Erlaube einen Nullschlüssel und Nullwerte. Sie sind nicht synchronisiert, was die Effizienz erhöht. Wenn es erforderlich ist, können Sie sie mit synchronisierenCollections.SynchronizedMap()
Hashtables
Erlaube keine Nullschlüssel und bin synchronisiert.quelle
HashMap ist eine Implementierung der Map-Schnittstelle. HashSet ist eine Implementierung der Set-Schnittstelle
HashMap Speichert Daten in Form eines Schlüsselwertpaars. HashSet Nur Objekte speichern
Die Put-Methode wird zum Hinzufügen eines Elements zur Karte verwendet. Die Add-Methode wird zum Hinzufügen des Elements Set verwendet
In der Hash-Map wird der Hashcode-Wert unter Verwendung des Schlüsselobjekts berechnet. Hier wird das Mitgliedsobjekt zur Berechnung des Hashcode-Werts verwendet, der für zwei Objekte gleich sein kann. Daher wird die Methode equal () verwendet, um die Gleichheit zu überprüfen, wenn false zurückgegeben wird, was bedeutet, dass zwei Objekte unterschiedlich sind.
HashMap ist schneller als Hashset, da für den Zugriff auf das Objekt ein eindeutiger Schlüssel verwendet wird. HashSet ist langsamer als Hashmap
quelle