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.
- Az
Object.hashCode()általában az objektum memória-címén alapuló értéket ad vissza, tehát minden példányhoz egyedi. - 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.