Sobes.tech
Junior — Middle

Como é garantida a consistência entre os métodos hashCode() e equals() em Java e por que isso é importante?

sobes.tech IA

Resposta da IA

Em Java, os métodos hashCode() e equals() devem estar alinhados para que os objetos funcionem corretamente em coleções como HashMap ou HashSet. Regras:

  • Se dois objetos são iguais segundo equals(), então o seu hashCode() deve retornar o mesmo valor.
  • Se o hashCode() de dois objetos for diferente, então equals() deve retornar false.

Isto é importante porque as tabelas de hash usam primeiro hashCode() para uma busca rápida, e depois equals() para uma comparação exata. Não cumprir este contrato pode levar a um funcionamento incorreto das coleções.

Exemplo:

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