Sobes.tech
Junior — Middle

Come viene garantita la coerenza tra i metodi hashCode() ed equals() in Java e perché è importante?

sobes.tech AI

Risposta dell'AI

In Java, i metodi hashCode() e equals() devono essere coerenti affinché gli oggetti funzionino correttamente nelle collezioni come HashMap o HashSet. Regole:

  • Se due oggetti sono uguali secondo equals(), allora il loro hashCode() deve restituire lo stesso valore.
  • Se hashCode() di due oggetti è diverso, allora equals() deve restituire false.

Questo è importante perché le tabelle hash usano prima hashCode() per una ricerca rapida, e poi equals() per un confronto preciso. Non rispettare questa regola può portare a un funzionamento errato delle collezioni.

Esempio:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return id == person.id;
}

@Override
public int hashCode() {
    return Objects.hash(id);
}