Junior — Middle
Co się stanie, jeśli w HashMapie wstawimy dwa klucze z tym samym kodem hash, ale różnymi wartościami equals?
sobes.tech AI
Odpowiedź od AI
W HashMap w Java klucze są przechowywane w kubełkach indeksowanych na podstawie kodu hash. Jeśli dwa klucze mają ten sam kod hash, trafiają do tego samego kubełka, ale do ustalenia unikalności używana jest metoda equals.
Jeśli wstawisz dwa klucze z tym samym kodem hash, ale które nie są równe według equals, HashMap zachowa oba klucze jako różne wpisy w tym samym kubełku.
Przykład:
Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, ale !key1.equals(key2)
map.put(key1, "value1");
map.put(key2, "value2");
System.out.println(map.size()); // 2
Oznacza to, że ten sam kod hash nie oznacza tych samych kluczy. HashMap najpierw szuka w kubełku po kodzie hash, a następnie porównuje klucze za pomocą equals. Jeśli equals zwraca false, klucz jest traktowany jako nowy i dodawany do kolekcji.