Sobes.tech
Junior — Middle

Milyen kölcsönös kapcsolatnak kell lennie az equals() és hashCode() metódusok között Java-ban a kollekciókban való helyes működéshez?

sobes.tech MI

Válasz az MI-től

Java-ban a equals() és hashCode() metódusoknak összhangban kell lenniük a kollekciók, különösen a HashMap és HashSet helyes működése érdekében.

Fő szabályok:

  • Ha két objektum egyenlő az equals() szerint, akkor hashCode()-juknak ugyanazt az értéket kell adnia.
  • Ha két objektum hashCode() értéke különbözik, akkor különbözőnek számítanak, és az equals() nem kerül meghívásra.
  • Ha hashCode() ugyanaz, az objektumok lehetnek egyenlőek vagy nem, ezért az equals()-t meghívják a megerősítéshez.

Ezeknek a szabályoknak a megsértése helytelen viselkedést eredményezhet a kollekciókban, például nem található meg egy objektum a HashSet-ben vagy a HashMap-ben.

Példa:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass other = (MyClass) obj;
    return this.id == other.id;
}

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