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);
}