Sobes.tech
Junior — Middle

Mikor és miért kell felülírni a hashCode metódust egy osztályban?

sobes.tech MI

Válasz az MI-től

A hashCode metódust felül kell írni az osztályban, ha az equals metódust felülírod. Ez szükséges a két metódus közötti szerződés betartásához: ha két objektum az equals szerint egyenlő, akkor a hash-kódjuknak is egyeznie kell. Ellenkező esetben az objektumok helytelenül működhetnek hash-alapú gyűjteményekben, például HashMap vagy HashSet.

Példa:

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

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

HashCode felülírása nélkül az equals szerint egyenlő objektumok különböző hash-kódokkal rendelkezhetnek, ami hibákhoz vezethet hash-alapú adatszerkezetekben.