Sobes.tech
Middle

Šta će vratiti metoda HasMap.get() ako metode equals i hashCode nisu prepisane?

sobes.tech АИ

Одговор од АИ

null će biti vraćeno ako ključ koji se koristi za pretraživanje nije tačno isti objekat (ima istu referencu) koji je korišćen prilikom umetanja elementa.

Razlog je što HashMap koristi kombinaciju hashCode() i equals() za određivanje "jednakosti" ključeva. Ako ove metode nisu prepisane, koriste se implementacije iz Object.

  1. Object.hashCode() obično vraća vrednost zasnovanu na adresi objekta u memoriji, što je jedinstveno za svaki primerak.
  2. Object.equals() jednostavno proverava referencijalnu jednakost (this == obj).

Dakle, da bi HashMap.get() pronašao element koristeći podrazumevane equals i hashCode, moraju biti ispunjena oba uslova:

  • Hash kodovi (Object.hashCode()) moraju biti jednaki, što je vrlo malo verovatno za različite objekte.
  • Objekti moraju biti referencijalno jednaki (Object.equals()), tj. moraju biti ista instanca.

Ako stavite objekat u HashMap i zatim pokušate da ga dobijete koristeći drugi objekat sa istim vrednostima polja (ali ne istu instancu), hashCode i equals će ih po default-u smatrati različitim, i get() će vratiti null.