Junior — Middle
Prečo je dôležité spolu prepísať metódy equals() a hashCode() v Jave?
sobes.tech AI
Odpoveď od AI
V Jave sú metódy equals() a hashCode() úzko prepojené a používajú sa na porovnávanie objektov a prácu s kolekciami založenými na hashovaní (napríklad HashMap, HashSet).
Ak prepíšete equals(), ale nie hashCode(), objekty považované za rovné podľa equals() môžu mať rôzne hash kódy. To porušuje zmluvu, podľa ktorej by mali mať rovné objekty rovnaký hashCode(). V dôsledku toho hashované kolekcie nebudú správne fungovať: napríklad, nebudú vedieť nájsť objekt alebo budú ukladať duplikáty.
Preto je vždy dôležité prepísať obe metódy spolu, aby ste zabezpečili správne správanie objektov v kolekciách a pri porovnávaní.
Príklad prepísania:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2 == myClass.field2;
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}