Middle
Ce va returna metoda HasMap.get() dacă metodele equals și hashCode nu sunt suprascrise?
sobes.tech AI
Răspuns de la AI
null va fi returnat dacă cheia utilizată pentru căutare nu este exact același obiect (are aceeași referință) cu cel folosit la inserare.
Motivul este că HashMap folosește o combinație de hashCode() și equals() pentru a determina "egalitatea" cheilor. Dacă aceste metode nu sunt suprascrise, se folosesc implementările din Object.
Object.hashCode()returnează de obicei o valoare bazată pe adresa de memorie a obiectului, adică unică pentru fiecare instanță.Object.equals()verifică pur și simplu egalitatea prin referință (this == obj).
Astfel, pentru ca HashMap.get() să găsească un element folosind equals și hashCode() ne suprascrise, trebuie să fie adevărate ambele condiții:
- Codurile hash (
Object.hashCode()) trebuie să fie egale, ceea ce este foarte puțin probabil pentru obiecte diferite. - Obiectele trebuie să fie referențial egal, (
Object.equals()), adică să fie același obiect.
Dacă plasați un obiect în HashMap și apoi încercați să îl recuperați folosind alt obiect cu aceleași valori de câmp (dar nu aceeași instanță), hashCode și equals vor considera în mod implicit că sunt diferite, iar get() va returna null.