Pierwszą rzeczą, którą musisz wiedzieć, jest to, że HashSetdziała jak a Set, co oznacza, że dodajesz swój obiekt bezpośrednio do HashSeti nie może zawierać duplikatów. Po prostu dodajesz swoją wartość bezpośrednio HashSet.
Jednak HashMapjest to Maptyp. Oznacza to, że za każdym razem, gdy dodajesz wpis, dodajesz parę klucz-wartość.
W HashMapmożesz mieć zduplikowane wartości, ale nie zduplikowane klucze. W HashMapnowym wpisie zastąpi stary. Najnowszy wpis będzie w HashMap.
Zrozumienie powiązania między HashMap i HashSet:
Pamiętaj, HashMapnie możesz mieć zduplikowanych kluczy. Za sceną HashSetużywa HashMap.
Kiedy próbujesz dodać dowolny obiekt do HashSet, ten wpis jest w rzeczywistości przechowywany jako klucz w HashMap- tym samym, HashMapktóry jest używany za sceną HashSet. Ponieważ ten HashMapelement 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 HashMapleżącego poniżej. Jednak HashMapnie obsługuje duplikatów. Dlatego HashSetnadal 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:
HashMapumożliwia duplikowanie values, ale nie keys.
HashSetnie może zawierać duplikatów.
Aby pobawić się, czy dodanie obiektu zakończyło się pomyślnie, czy nie, możesz sprawdzić booleanwartość zwracaną podczas wywołania .add() i zobaczyć, czy zwraca truelub false. Jeśli zwrócił true, został włożony.
HashMapaby sprawdzić, czykeyjuż istnieje przed wywołaniemputpodkładumap?