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