Sobes.tech
Junior — Middle

Ai putea să explici scopul metodei hashCode și rolul său în utilizarea contractelor în Java?

sobes.tech AI

Răspuns de la AI

Metoda hashCode() în Java returnează o valoare întreagă care reprezintă hash-ul obiectului. Este utilizată în colecții bazate pe hashing, cum ar fi HashMap, HashSet.

Rolul hashCode() în contractul cu equals():

  • Dacă două obiecte sunt egale conform metodei equals(), atunci valorile lor hashCode() trebuie să fie aceleași.
  • Dacă equals() returnează false, atunci hashCode() poate returna valori diferite, dar nu este obligatoriu.

Acest lucru este important pentru funcționarea corectă a structurilor hash: mai întâi se calculează hash-ul pentru a determina coșul, apoi se apelează equals() pentru comparație exactă.

Exemplu de suprascriere:

@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();
}

Nerespectarea acestui contract poate duce la funcționarea incorectă a colecțiilor și la erori greu de detectat.