Junior — Middle
Môžete vysvetliť účel metódy hashCode a jej úlohu pri používaní zmlúv v Jave?
sobes.tech AI
Odpoveď od AI
Metóda hashCode() v Jave vracia celé číslo, ktoré predstavuje hash objektu. Používa sa v kolekciách založených na hashovaní, ako sú HashMap, HashSet.
Úloha hashCode() v zmluve s equals():
- Ak sú dva objekty rovnaké podľa metódy
equals(), ichhashCode()musia vracať rovnakú hodnotu. - Ak
equals()vraciafalse,hashCode()môže vracať odlišné hodnoty, nie je to však povinné.
Toto je dôležité pre správne fungovanie hash štruktúr: najskôr sa vypočíta hash na určenie koša, potom sa volá equals() na presné porovnanie.
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 field.equals(myClass.field);
}
@Override
public int hashCode() {
return field.hashCode();
}
Porušenie tohto kontraktu môže viesť k nesprávnemu fungovaniu kolekcií a ťažko odhaliteľným chybám.