Das erste, was Sie wissen müssen, ist, dass es sich HashSetwie ein verhält Set, was bedeutet, dass Sie Ihr Objekt direkt zum hinzufügen HashSetund es keine Duplikate enthalten kann. Sie fügen einfach Ihren Wert direkt hinzuHashSet .
Ist HashMapjedoch einMap Typ. Das bedeutet, dass Sie jedes Mal, wenn Sie einen Eintrag hinzufügen, ein Schlüssel-Wert-Paar hinzufügen.
In können HashMapSie doppelte Werte haben, aber keine doppelten Schlüssel. Im HashMapneuen Eintrag wird der alte ersetzt. Der letzte Eintrag wird in der seinHashMap .
Grundlegendes zur Verbindung zwischen HashMap und HashSet:
Denken Sie daran, HashMapkann keine doppelten Schlüssel haben. Hinter den Kulissen HashSetverwendet 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 HashMapein 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 HashMapdarunter liegende Objekt einzufügen . Allerdings HashMapbietet 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:
HashMaperlaubt Duplikate values, aber nicht keys.
HashSetdarf keine Duplikate enthalten.
Um zu spielen, ob das Hinzufügen eines Objekts erfolgreich abgeschlossen wurde oder nicht, können Sie den booleanbeim Aufruf zurückgegebenen Wert überprüfen .add() und feststellen, ob er zurückgegeben wird trueoder false. Wenn es zurückgegeben wurde true, wurde es eingefügt.
HashMap, ob derkeybereits vorhanden ist, bevor sieputden Hintergrund aufrufenmap.