Sobes.tech
Junior — Middle

Explicați cum funcționează împreună metodele equals și hashCode în determinarea egalității obiectelor în Java.

sobes.tech AI

Răspuns de la AI

În Java, metodele equals și hashCode sunt strâns legate și sunt utilizate pentru a determina egalitatea obiectelor, în special atunci când lucrați cu colecții precum HashMap sau HashSet.

  • Metoda equals(Object obj) compară obiectul curent cu altul pentru a verifica dacă sunt egal logic.
  • Metoda hashCode() returnează o valoare întreagă (cod hash), care este utilizată pentru căutarea rapidă a unui obiect în structuri de date bazate pe hash.

Este important să respectați contractul dintre aceste metode:

  1. Dacă două obiecte sunt egale conform equals(), atunci hashCode() trebuie să returneze aceeași valoare.
  2. Dacă hashCode() a două obiecte este diferit, atunci equals() trebuie să returneze neapărat false.

Acest lucru asigură funcționarea corectă a colecțiilor bazate pe hash. Dacă suprascrieți equals(), trebuie să suprascrieți și hashCode() pentru a evita erorile, de exemplu, când două obiecte egale ajung în coșuri diferite ale unei tabele hash.

Exemplu:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass other = (MyClass) obj;
    return Objects.equals(field1, other.field1) && field2 == other.field2;
}

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}