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 seushashCode()devem devolver o mesmo valor. - Se
equals()devolvefalse, entãohashCode()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.