Junior — Middle
Explicați cum sunt legate metodele equals și hashCode în Java și de ce este importantă implementarea lor corectă pentru funcționarea colecțiilor.
sobes.tech AI
Răspuns de la AI
În Java, metodele equals și hashCode sunt strâns legate și sunt utilizate pentru compararea obiectelor și stocarea lor în colecții precum HashMap, HashSet.
Reguli:
- Dacă două obiecte sunt egale conform metodei
equals(adică,a.equals(b) == true), atunci trebuie să aibă acelașihashCode. - Dacă
hashCode-ul obiectelor diferă, atunciequalspentru ele trebuie să returnezefalse.
De ce este important:
Colecțiile bazate pe hash folosesc mai întâi hashCode pentru a găsi rapid coșul (bucket), apoi equals pentru compararea exactă a obiectelor din coș. Dacă aceste metode nu sunt implementate corect, obiectele pot să nu fie găsite în colecție, chiar dacă sunt logic egale.
Exemplu de implementare corectă:
@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);
}
Astfel, o implementare corectă a equals și hashCode asigură funcționarea corectă a colecțiilor și previne erorile la căutare, adăugare și ștergere de elemente.