Das erste, was Sie wissen müssen, ist, dass es sich HashSet
wie ein verhält Set
, was bedeutet, dass Sie Ihr Objekt direkt zum hinzufügen HashSet
und es keine Duplikate enthalten kann. Sie fügen einfach Ihren Wert direkt hinzuHashSet
.
Ist HashMap
jedoch einMap
Typ. Das bedeutet, dass Sie jedes Mal, wenn Sie einen Eintrag hinzufügen, ein Schlüssel-Wert-Paar hinzufügen.
In können HashMap
Sie doppelte Werte haben, aber keine doppelten Schlüssel. Im HashMap
neuen Eintrag wird der alte ersetzt. Der letzte Eintrag wird in der seinHashMap
.
Grundlegendes zur Verbindung zwischen HashMap und HashSet:
Denken Sie daran, HashMap
kann keine doppelten Schlüssel haben. Hinter den Kulissen HashSet
verwendet ein HashMap
.
Wenn Sie versuchen, ein Objekt zu einem hinzuzufügen HashSet
, wird dieser Eintrag tatsächlich als Schlüssel im HashMap
- gespeichert HashMap
, der auch hinter den Kulissen von verwendet wird HashSet
. Da dieser Basiswert HashMap
ein Schlüssel-Wert-Paar benötigt, wird für uns ein Dummy-Wert generiert.
Wenn Sie nun versuchen, ein anderes doppeltes Objekt in dasselbe einzufügen HashSet
, wird erneut versucht, es als Schlüssel in das HashMap
darunter liegende Objekt einzufügen . Allerdings HashMap
bietet keine Unterstützung für Duplikate. Daher,HashSet
wird immer noch nur ein Wert dieses Typs angezeigt. Nebenbei bemerkt, für jeden doppelten Schlüssel wird der Schlüssel überhaupt nicht ersetzt, da der für unseren Eintrag in HashSet generierte Wert ein Zufalls- / Dummy-Wert ist. Es wird ignoriert, da das Entfernen des Schlüssels und das Zurücksetzen desselben Schlüssels (der Dummy-Wert ist der gleiche) überhaupt keinen Sinn ergeben würde.
Zusammenfassung:
HashMap
erlaubt Duplikate values
, aber nicht keys
.
HashSet
darf keine Duplikate enthalten.
Um zu spielen, ob das Hinzufügen eines Objekts erfolgreich abgeschlossen wurde oder nicht, können Sie den boolean
beim Aufruf zurückgegebenen Wert überprüfen .add()
und feststellen, ob er zurückgegeben wird true
oder false
. Wenn es zurückgegeben wurde true
, wurde es eingefügt.
HashMap
, ob derkey
bereits vorhanden ist, bevor sieput
den Hintergrund aufrufenmap
.