Sobes.tech
Junior — Middle

Poderia explicar a finalidade do método hashCode e o seu papel ao usar contratos em Java?

sobes.tech IA

Resposta da IA

O método hashCode() em Java devolve um valor inteiro que representa o hash do objeto. É utilizado em coleções baseadas em hashing, como HashMap, HashSet.

Papel do hashCode() no contrato com equals():

  • Se dois objetos são iguais segundo o método equals(), então seus hashCode() devem devolver o mesmo valor.
  • Se equals() devolve false, então hashCode() pode devolver valores diferentes, mas não é obrigatório.

Isto é importante para o funcionamento correto das estruturas de hash: primeiro calcula-se o hash para determinar a caixa, e depois chama-se equals() para comparação exata.

Exemplo de sobrescrita:

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

O incumprimento deste contrato pode levar a um funcionamento incorreto das coleções e a erros difíceis de detectar.