Middle
Ką grąžins HasMap.get() metodas, jei metodai equals ir hashCode nėra perrašyti?
sobes.tech AI
Atsakymas iš AI
null bus grąžintas, jei paieškos raktas nėra būtent tas pats objektas (turi tą pačią nuorodą), kuris buvo naudotas elemento įterpimui.
Priežastis ta, kad HashMap naudoja hashCode() ir equals() derinį, kad nustatytų raktų "lygybę". Jei šie metodai nėra perrašyti, naudojamos Object klasės realizacijos.
Object.hashCode()paprastai grąžina reikšmę, pagrįstą objekto atminties adresu, tai yra unikalus kiekvienam egzemplioriui.Object.equals()paprasčiausiai tikrina nuorodų lygybę (this == obj).
Todėl, kad HashMap.get() rastų elementą naudodamas neperspaustus equals ir hashCode, turi būti įvykdytos abi sąlygos:
- Hash kodai (
Object.hashCode()) turi būti lygūs, kas labai mažai tikėtina skirtingiems objektams. - Objektai turi būti nuorodų lygybės (
Object.equals()), tai yra, turi būti tas pats egzempliorius.
Jei įdedate objektą į HashMap ir vėliau bandote jį gauti naudodami kitą objektą su tais pačiais lauko reikšmėmis (bet ne tą patį egzempliorių), hashCode ir equals pagal numatytuosius nustatymus juos laiko skirtingais, ir get() grąžins null.