Sobes.tech
Junior — Middle

Mik az alapelvek az equals és hashCode módszerek közötti kapcsolatban Java-ban?

sobes.tech MI

Válasz az MI-től

Az equals és hashCode közötti kapcsolat alapelvei Java-ban:

  • Ha két objektum az equals szerint egyenlő, akkor azok hashCode értéke ugyanaz kell legyen.
  • Ha két objektum hashCode értéke különbözik, akkor az equals-nek biztosan false-t kell adnia.
  • Ha az equals false-t ad, a hashCode lehet egyező, de ez nem kívánatos, mivel rontja a hash-alapú struktúrák teljesítményét.

Ez biztosítja a hash-elést használó kollekciók (HashMap, HashSet) helyes működését, ahol a hashCode határozza meg a kosarat, az equals pedig az objektumok pontos összehasonlítását végzi.

Példa:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return Objects.equals(id, person.id);
}

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

Ebben az esetben az equals és a hashCode ugyanarra a mezőre, az id-ra épül, biztosítva azok összhangját.