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