Sobes.tech
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și hashCode.
  • Dacă hashCode-ul obiectelor diferă, atunci equals pentru ele trebuie să returneze false.

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.