Wewnętrzna implementacja java.util.HashMap i HashSet
Próbowałem zrozumieć wewnętrzną implementacjęjava.util.HashMap
ijava.util.HashSet
.
Następujące wątpliwości pojawiają się w mojej głowie na chwilę:
Jakie jest znaczenie tego@Override public int hashcode()
w HashMap / HashSet? Gdzie jest używany wewnętrzny kod skrótu?Ogólnie widziałem klucz HashMap jako aString
lubićmyMap<String,Object>
. Czy mogę zmapować wartości przeciwkosomeObject
(zamiast String) jakmyMap<someObject, Object>
? Jakie wszystkie kontrakty muszę wykonać, aby to się stało pomyślnie?Z góry dziękuję !
EDYTOWAĆ:
Czy mówimy, że kod skrótu klucza (sprawdź!) Jest rzeczywistą rzeczą, przeciwko której wartość jest odwzorowywana w tabeli mieszania? A kiedy to zrobimymyMap.get(someKey);
java dzwoni wewnętrzniesomeKey.hashCode()
aby uzyskać liczbę w tabeli Hash, aby uzyskać wynikową wartość?Odpowiedź: Tak.
EDYCJA 2:
Wjava.util.HashSet
, skąd jest generowany klucz dla tabeli Hash? Czy to z obiektu, który dodajemy, np.mySet.add(myObject);
następniemyObject.hashCode()
zdecyduje, gdzie to jest umieszczone w tabeli mieszania? (ponieważ nie dajemy kluczy w HashSet).Odpowiedź: Dodany obiekt staje się kluczem. Wartość jest obojętna!