Sobes.tech
Middle

Čo vráti metóda HasMap.get(), ak metódy equals a hashCode nie sú prepísané?

sobes.tech AI

Odpoveď od AI

null bude vrátené, ak kľúč, podľa ktorého sa vykonáva vyhľadávanie, nie je presne ten istý objekt (má rovnakú referenciu), ktorý bol použitý pri vkladaní prvku.

Dôvodom je, že HashMap používa kombináciu hashCode() a equals() na určenie "rovnosti" kľúčov. Ak tieto metódy nie sú prepísané, používajú sa implementácie z Object.

  1. Object.hashCode() zvyčajne vracia hodnotu založenú na adrese objektu v pamäti, teda jedinečnú pre každý inštanciu.
  2. Object.equals() jednoducho kontroluje referenčnú rovnosť (this == obj).

Preto, aby HashMap.get() našiel prvok pomocou predvolených equals a hashCode, musia byť splnené obe podmienky:

  • Hash kódy (Object.hashCode()) musia byť rovnaké, čo je veľmi nepravdepodobné pre rôzne objekty.
  • Objekty musia byť referenčne rovnaké (Object.equals()), teda musia byť tá istá inštancia.

Ak vložíte objekt do HashMap a potom sa pokúsite ho získať pomocou iného objektu s rovnakými hodnotami polí (ale nie rovnakou inštanciou), hashCode a equals podľa predvoleného správania ich budú považovať za odlišné, a get() vráti null.