Sobes.tech
Middle

Milyen szabályok vannak az equals és hashCode módszerekhez?

sobes.tech MI

Válasz az MI-től

  1. Ha két objektum egyenlő a equals(Object) módszer szerint, akkor azok hash-kódjai (hashCode()) ugyanazoknak kell lenniük.
  2. 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.
  3. 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.
  4. Szimmetria: bármely a és b objektum esetén, ha a.equals(b) true, akkor b.equals(a) is true kell legyen.
  5. Reflexivitás: minden nem-null a objektum esetén, a.equals(a) true kell legyen.
  6. Transitivitás: bármely a, b és c objektum esetén, ha a.equals(b) true és b.equals(c) true, akkor a.equals(c) is true kell legyen.
  7. Következetesség: minden nem-null a és b objektum esetén, többszöri a.equals(b) hívásnak következetesen true vagy false értéket kell adnia, amennyiben az equals(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...
}