Middle
Ko atgriezīs HasMap.get() metode, ja metodes equals un hashCode nav pārrakstītas?
sobes.tech AI
Atbilde no AI
null tiks atgriezts, ja meklēšanas atslēga nav tieši tā pati objekts (tai ir tā pati atsauce), kas tika izmantota elementa ievietošanai.
Iemesls ir tas, ka HashMap izmanto hashCode() un equals() kombināciju, lai noteiktu atslēgu "vienādību". Ja šīs metodes nav pārrakstītas, tiek izmantotas no Object klases realizācijas.
Object.hashCode()parasti atgriež vērtību, kas balstīta uz objekta atmiņas adresi, tas ir, unikāla katram eksemplāram.Object.equals()vienkārši pārbauda atsauces vienādību (this == obj).
Tādēļ, lai HashMap.get() atrastu elementu, izmantojot nepārrakstītus equals un hashCode, jābūt abiem nosacījumiem:
- Heshkodi (
Object.hashCode()) ir jābūt vienādiem, kas ļoti maz ticams dažādiem objektiem. - Objektiem jābūt atsauces vienādiem (
Object.equals()), tas ir, jābūt tā pašā eksemplārī.
Ja jūs ievietojat objektu HashMap un pēc tam mēģināt to iegūt, izmantojot citu objektu ar tiem pašiem lauka vērtībām (bet ne to pašu eksemplāru), hashCode un equals pēc noklusējuma uzskatīs, ka tie ir dažādi, un get() atgriezīs null.