Pierwszą rzeczą, którą musisz wiedzieć, jest to, że HashSet
działa jak a Set
, co oznacza, że dodajesz swój obiekt bezpośrednio do HashSet
i nie może zawierać duplikatów. Po prostu dodajesz swoją wartość bezpośrednio HashSet
.
Jednak HashMap
jest to Map
typ. Oznacza to, że za każdym razem, gdy dodajesz wpis, dodajesz parę klucz-wartość.
W HashMap
możesz mieć zduplikowane wartości, ale nie zduplikowane klucze. W HashMap
nowym wpisie zastąpi stary. Najnowszy wpis będzie w HashMap
.
Zrozumienie powiązania między HashMap i HashSet:
Pamiętaj, HashMap
nie możesz mieć zduplikowanych kluczy. Za sceną HashSet
używa HashMap
.
Kiedy próbujesz dodać dowolny obiekt do HashSet
, ten wpis jest w rzeczywistości przechowywany jako klucz w HashMap
- tym samym, HashMap
który jest używany za sceną HashSet
. Ponieważ ten HashMap
element bazowy wymaga pary klucz-wartość, generowana jest dla nas wartość fikcyjna.
Teraz, gdy spróbujesz wstawić inny zduplikowany obiekt do tego samego HashSet
, ponownie spróbuje wstawić go jako klucz do HashMap
leżącego poniżej. Jednak HashMap
nie obsługuje duplikatów. Dlatego HashSet
nadal będzie skutkować posiadaniem tylko jednej wartości tego typu. Na marginesie, dla każdego zduplikowanego klucza, ponieważ wartość wygenerowana dla naszego wpisu w HashSet jest jakąś losową / fikcyjną wartością, klucz nie jest w ogóle zastępowany. zostanie zignorowane, ponieważ usunięcie klucza i dodanie z powrotem tego samego klucza (fikcyjna wartość jest taka sama) nie miałoby żadnego sensu.
Podsumowanie:
HashMap
umożliwia duplikowanie values
, ale nie keys
.
HashSet
nie może zawierać duplikatów.
Aby pobawić się, czy dodanie obiektu zakończyło się pomyślnie, czy nie, możesz sprawdzić boolean
wartość zwracaną podczas wywołania .add()
i zobaczyć, czy zwraca true
lub false
. Jeśli zwrócił true
, został włożony.
HashMap
aby sprawdzić, czykey
już istnieje przed wywołaniemput
podkładumap
?