Junior — Middle
Vysvetlite rozdiely medzi metódami equals() a hashCode() v Jave a prečo sú spolu potrebné.
sobes.tech AI
Odpoveď od AI
Metódy equals() a hashCode() v Jave súvisia s porovnávaním objektov a ich používaním v kolekciách.
-
equals()určuje, či sú dva objekty rovnaké v zmysle (logicky). Predvolene, v triedeObject, porovnáva referencie (t.j., či ide o tie isté objekty v pamäti), ale zvyčajne sa prepíše na porovnanie obsahu. -
hashCode()vracia celé číslo — hash kód objektu. Používa sa napríklad v hash tabuľkách (HashMap,HashSet) na rýchle vyhľadávanie.
Je dôležité, aby ak sú dva objekty považované za rovnaké podľa equals(), mali aj rovnaký hashCode(). Táto pravidlo zabezpečuje správne fungovanie hashovaných kolekcií.
Príklad:
class Person {
String name;
int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person p = (Person) o;
return age == p.age && name.equals(p.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Tu equals() porovnáva polia, a hashCode() vracia hash založený na tých istých poliach, čo zabezpečuje konzistentnosť.