Sobes.tech
Middle

Co zwróci metoda HasMap.get(), jeśli metody equals i hashCode nie są nadpisane?

sobes.tech AI

Odpowiedź od AI

null zostanie zwrócone, jeśli klucz, według którego przeprowadzane jest wyszukiwanie, nie jest tym samym obiektem (posiada tym samym odniesieniem), który został użyty podczas dodawania elementu.

Powodem jest to, że HashMap używa kombinacji hashCode() i equals() do określenia "równości" kluczy. Jeśli te metody nie są nadpisane, korzystają z implementacji z Object.

  1. Object.hashCode() zazwyczaj zwraca wartość opartą na adresie obiektu w pamięci, czyli unikalną dla każdej instancji.
  2. Object.equals() po prostu sprawdza równość odwołań (this == obj).

Aby HashMap.get() znalazł element przy użyciu domyślnych equals i hashCode, muszą być spełnione oba warunki:

  • Kody hash (Object.hashCode()) muszą być równe, co jest bardzo mało prawdopodobne dla różnych obiektów.
  • Obiekty muszą być równe odwołaniem (Object.equals()), czyli musi to być ta sama instancja obiektu.

Jeśli umieścisz obiekt w HashMap i potem spróbujesz go pobrać, używając innego obiektu z tymi samymi wartościami pól (ale nie tej samej instancji), hashCode i equals domyślnie będą je traktować jako różne, a get() zwróci null.