Sobes.tech
Middle

Mit ad vissza a HasMap.get() metódus, ha az equals és hashCode metódusokat nem írjuk felül?

sobes.tech MI

Válasz az MI-től

A null értéket akkor ad vissza, ha a kereséshez használt kulcs nem ugyanaz a objektum (azonos referencia), mint amit az elem beszúrásakor használtak.

Ennek oka, hogy a HashMap azonosítására a kulcsok között a hashCode() és az equals() metódusokat használja. Ha ezek a metódusok nincsenek felülírva, az Object osztály implementációit használja.

  1. Az Object.hashCode() általában az objektum memória-címén alapuló értéket ad vissza, tehát minden példányhoz egyedi.
  2. Az Object.equals() egyszerűen csak a referencia-egyenlőséget ellenőrzi (this == obj).

Ezért, hogy a HashMap.get() megtalálja az elemet, ha az equals() és hashCode() nem felülírt, mindkét feltételnek teljesülnie kell:

  • A hash-kódok (Object.hashCode()) egyezniük kell, ami nagyon valószínűtlen különböző objektumok esetén.
  • Az objektumok referencia szerint egyenlőek kell legyenek (Object.equals()), azaz ugyanaz a példány kell legyen.

Ha egy objektumot helyezel el a HashMap-be, és később megpróbálod lekérni ugyanazzal az értékkel rendelkező, de másik példánnyal, az hashCode() és equals() alapértelmezettként különbözőnek fogják tekinteni, és a get() null-t fog visszaadni.