Sobes.tech
Junior — Middle

Miért ajánlott az equals() és hashCode() metódusokat együtt implementálni egy osztály meghatározásakor?

sobes.tech MI

Válasz az MI-től

Az equals() és hashCode() metódusok összefüggnek egymással, és együtt kell őket megvalósítani a helyes viselkedés biztosítása érdekében olyan kollekciókban, mint például HashMap, HashSet és más, hash-elésen alapuló kollekciók.

Ha két objektumot az equals() szerint egyenlőnek tekintünk, akkor a hashCode() értékük ugyanaz kell legyen. Ellenkező esetben a kollekciók helytelenül működhetnek: például egy objektum nem lesz megtalálható a hash-táblában, még akkor sem, ha ott van.

Példa:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return id == myClass.id;
}

@Override
public int hashCode() {
    return Objects.hash(id);
}

Ezzel a közös megvalósítással garantálható az objektumok konzisztenciája és helyes működése a kollekciókban.