Sobes.tech
Junior — Middle

Jak je zajištěna konzistence mezi metodami hashCode() a equals() v Javě a proč je to důležité?

sobes.tech AI

Odpověď od AI

V jazyce Java musí být metody hashCode() a equals() konzistentní, aby objekty správně fungovaly v kolekcích, jako jsou HashMap nebo HashSet. Pravidla:

  • Pokud jsou dva objekty podle equals() shodné, jejich hashCode() musí vracet stejnou hodnotu.
  • Pokud se hashCode() dvou objektů liší, pak equals() určitě vrátí false.

To je důležité, protože hash tabulky nejprve používají hashCode() pro rychlé vyhledávání a poté equals() pro přesné porovnání. Nedodržení této smlouvy může vést k nesprávnému chování kolekcí.

Pří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);
}