Sobes.tech
Junior — Middle

Hogyan biztosított a hashCode() és az equals() metódusok összhangja Java-ban, és miért fontos ez?

sobes.tech MI

Válasz az MI-től

Java-ban a hashCode() és az equals() módszereknek összhangban kell lenniük, hogy az objektumok helyesen működjenek olyan gyűjteményekben, mint a HashMap vagy HashSet. Szabályok:

  • Ha két objektum az equals() szerint egyenlő, akkor hashCode() ugyanazt az értéket kell, hogy adja.
  • Ha két objektum hashCode() értéke különbözik, akkor az equals() biztosan false-t ad.

Ez fontos, mert a hash-táblák először hashCode()-ot használnak gyors kereséshez, majd az equals()-t a pontos összehasonlításhoz. Ennek a szerződésnek a megszegése hibás működést eredményezhet a gyűjteményekben.

Példa:

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

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