Miért szükségesek az equals és hashCode metódusok Java-ban?
sobes.tech MI
Válasz az MI-től
A Java equals és hashCode metódusokat az objektumok helyes összehasonlítására és hash-alapú kollekciókkal (például HashMap, HashSet) való munkára használják.
-
equals(Object o): Meghatározza, hogy a jelenlegi objektum egyenértékű-e egy másik objektummal. Alapértelmezés szerint az objektumokra mutató hivatkozásokat hasonlítja össze. Felülírható az objektumok belső állapotának összehasonlítására. -
hashCode(): Visszaad egy egész számot (hash-kódot) az objektumról. Gyors kereséshez használják a kollekciók. Meg kell egyeznie azequals-szel: ha két objektum egyenlő azequalsszerint, akkor a hash-kódjuknak is egyeznie kell. A fordított állítás nem igaz.
Helytelen vagy hiányzó felülírásuk a kollekciókban való használat során hibás viselkedést eredményezhet, például az, hogy egy objektum nem található a Set-ben a hozzáadás után, vagy nem lehet megtalálni egy objektumot a HashMap-ben kulcs szerint.
Felülírás példája:
public class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true; // Hivatkozások összehasonlítása
if (o == null || getClass() != o.getClass()) return false; // Típus és null ellenőrzés
MyObject that = (MyObject) o; // Átkonvertálás
if (id != that.id) return false; // Mezők összehasonlítása
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
int result = id; // Hash-kód számítása mezők alapján
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}