Sobes.tech
Junior — Middle

Ako je zagotovljena skladnost med metodami hashCode() in equals() v Javi in zakaj je to pomembno?

sobes.tech AI

Odpoveď od AI

V Jave musia byť metódy hashCode() a equals() konzistentné, aby objekty správne fungovali v kolekciách ako HashMap alebo HashSet. Pravidlá:

  • Ak sú dva objekty rovnaké podľa equals(), ich hashCode() musí vracať rovnakú hodnotu.
  • Ak sa hashCode() dvoch objektov líši, potom equals() určite vráti false.

Je to dôležité, pretože hash tabuľky najskôr používajú hashCode() na rýchle vyhľadávanie a potom equals() na presné porovnanie. Nedodržanie tohto kontraktu môže viesť k nesprávnemu správaniu kolekcií.

Príklad:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return id == person.id;
}

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