Sobes.tech
Junior — Middle

Qual é a importância de sobrescrever o método hashCode para objetos usados em coleções?

sobes.tech IA

Resposta da IA

A sobrescrita do método hashCode é importante para o funcionamento correto dos objetos em coleções baseadas em hash, como HashMap, HashSet e Hashtable. Essas coleções usam o código hash do objeto para buscas e armazenamento rápidos. Se hashCode não for sobrescrito junto com equals, objetos considerados iguais por equals podem ter códigos hash diferentes, levando a um comportamento incorreto das coleções: por exemplo, duplicados podem não ser detectados, ou um objeto pode não ser encontrado na busca.

Regras para sobrescrita:

  • Se dois objetos são iguais segundo equals, seus hashCode devem ser iguais.
  • Se equals retorna false, os códigos hash podem ser iguais, mas é melhor minimizar colisõ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);
}

Aqui, objetos são considerados iguais se tiverem o mesmo id, e o código hash é construído com base nesse campo.