Sobes.tech
Junior — Middle

Magyarázza el a különbségeket az equals() és hashCode() metódusok között Java-ban, és miért szükségesek együtt.

sobes.tech MI

Válasz az MI-től

A equals() és a hashCode() metódusok Java-ban az objektumok összehasonlításával és azok kollekciókban való használatával kapcsolatosak.

  • A equals() meghatározza, hogy két objektum logikailag egyenlő-e. Alapértelmezés szerint az Object osztályban referencia szerint hasonlít (azaz, ugyanazokat az objektumokat jelölik-e a memóriában), de általában felülírják a tartalom összehasonlítása érdekében.

  • A hashCode() egy egész számot ad vissza — az objektum hash-kódját. Például, gyors kereséshez hash táblákban (HashMap, HashSet) használják.

Fontos, hogy ha két objektumot a equals() szerint egyenlőnek tekintenek, akkor ugyanazt a hashCode() értéket kell, hogy adjon. Ez a szabály biztosítja a hash-alapú kollekciók helyes működését.

Példa:

class Person {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return age == p.age && name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Ebben a példában az equals() a mezőket hasonlítja össze, és a hashCode() ugyanazon mezők alapján ad vissza hash értéket, biztosítva a konzisztenciát.