Middle
Milyen szabályok vannak az equals és hashCode módszerekhez?
sobes.tech MI
Válasz az MI-től
- Ha két objektum egyenlő a
equals(Object)módszer szerint, akkor azok hash-kódjai (hashCode()) ugyanazoknak kell lenniük. - Ha két objektum nem egyenlő a
equals(Object)módszer szerint, akkor hash-kódjaik lehetnek ugyanazok vagy különbözőek. Jó gyakorlat biztosítani, hogy nem egyenlő objektumoknak különböző hash-kódokat adjon, a hash-alapú kollekciók jobb teljesítménye érdekében. - A
hashCode()módszernek ugyanazokat az értékeket kell visszaadnia ugyanazon objektum esetén többszöri híváskor, amennyiben a hash-kód számításához használt információk nem változtak. - Szimmetria: bármely
aésbobjektum esetén, haa.equals(b)true, akkorb.equals(a)istruekell legyen. - Reflexivitás: minden nem-null
aobjektum esetén,a.equals(a)truekell legyen. - Transitivitás: bármely
a,béscobjektum esetén, haa.equals(b)trueésb.equals(c)true, akkora.equals(c)istruekell legyen. - Következetesség: minden nem-null
aésbobjektum esetén, többszöria.equals(b)hívásnak következetesentruevagyfalseértéket kell adnia, amennyiben azequals(Object)-ben használt információk nem változtak.
Implementációs példa:
public class MyClass {
private int value;
private String name;
public MyClass(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Objektum identitásának ellenőrzése
if (this == o) {
return true;
}
// Objektum típusának ellenőrzése
if (o == null || getClass() != o.getClass()) {
return false;
}
// Típus konvertálás
MyClass myClass = (MyClass) o;
// Mezők szerinti összehasonlítás
return value == myClass.value &&
Objects.equals(name, myClass.name); // Null kezelésére Objects.equals
}
@Override
public int hashCode() {
// Hash kód generálása az Objects.hash segítségével
return Objects.hash(value, name);
}
// Egyéb metódusok...
}