Sobes.tech
Junior — Middle

Miért fontos együtt felülírni az equals() és hashCode() metódusokat Java-ban?

sobes.tech MI

Válasz az MI-től

Java-ban az equals() és hashCode() metódusok szorosan összefüggenek egymással, és az objektumok összehasonlítására, valamint hash-alapú gyűjteményekkel való munkára használják őket (például HashMap, HashSet).

Ha felülírod az equals() metódust, de nem a hashCode()-t, akkor az equals() szerint egyenlő objektumok különböző hash-kódokkal rendelkezhetnek. Ez sérti azt a szerződést, hogy az egyenlő objektumoknak ugyanazt a hashCode() értéket kell adniuk. Ennek eredményeként a hash-alapú gyűjtemények nem fognak megfelelően működni: például nem találják meg az objektumot, vagy duplikátumokat tárolnak.

Ezért mindig fontos mindkét metódust együtt felülírni, hogy biztosítsuk az objektumok helyes viselkedését a gyűjteményekben és összehasonlításkor.

Felülírás példája:

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

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}