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ódyhashCode()musia vracať rovnakú hodnotu. - Ak sa
hashCode()dvoch objektov líši, považujú sa za odlišné aequals()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);
}