Sobes.tech
Junior — Middle

Aký by mal byť vzájomný vzťah medzi metódami equals() a hashCode() v Jave pre správnu funkciu objektov v kolekciách?

sobes.tech AI

Odpoveď od AI

V jazyku Java musia byť metódy equals() a hashCode() konzistentné, aby objekty správne fungovali v kolekciách, najmä v HashMap a HashSet.

Hlavné pravidlá:

  • Ak sú dva objekty rovnaké podľa equals(), ich metódy hashCode() musia vracať rovnakú hodnotu.
  • Ak sa hashCode() dvoch objektov líši, považujú sa za odlišné a equals() sa nevolá.
  • Ak je hashCode() rovnaký, objekty môžu byť rovnaké alebo nie, preto sa volá equals() na overenie.

Porušenie týchto pravidiel môže viesť k nesprávnemu správaniu kolekcií, napríklad k tomu, že objekt nebude nájdený v HashSet alebo HashMap.

Príklad:

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