Sobes.tech
Junior — Middle

Qual deve ser a relação mútua entre os métodos equals() e hashCode() em Java para o funcionamento correto dos objetos nas coleções?

sobes.tech IA

Resposta da IA

Em Java, os métodos equals() e hashCode() devem estar em conformidade para o funcionamento correto dos objetos em coleções, especialmente em HashMap e HashSet.

Regras principais:

  • Se dois objetos são iguais segundo equals(), os seus métodos hashCode() devem retornar o mesmo valor.
  • Se hashCode() de dois objetos for diferente, eles são considerados diferentes e equals() não é chamado.
  • Se hashCode() for igual, os objetos podem ser iguais ou não, dependendo de equals(), por isso equals() é chamado para verificar.

O não cumprimento dessas regras pode levar a comportamentos incorretos das coleções, como não conseguir encontrar um objeto em HashSet ou HashMap.

Exemplo:

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

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