Junior
Para que é que é utilizado o método hashCode?
sobes.tech IA
Resposta da IA
O método hashCode() em Java e Kotlin é usado para gerar um valor inteiro que representa um objeto. Desempenha um papel fundamental no funcionamento de coleções baseadas em tabelas de dispersão (HashMap, HashSet, Hashtable), onde é usado para determinar rapidamente a "caixa" (bucket) onde um objeto deve estar ou ser procurado. Pontos-chave:
- Garantir o contrato
equalsehashCode: Se dois objetos são considerados "iguais" pelo métodoequals(), então o seuhashCode()deve retornar o mesmo valor. O inverso não é verdadeiro: objetos diferentes podem ter o mesmo código hash (colisão). - Procura/Inserção rápida: O código hash é usado como índice para acesso rápido aos elementos em coleções de hash. Sem ele, a busca em coleções grandes seria muito mais lenta.
- Não obrigatório: Se um objeto não for planejado para ser usado como chave em coleções de hash, a implementação padrão de
hashCode()(geralmente baseada no endereço de memória) pode ser suficiente. No entanto, seequals()for sobrescrito, também deve-se sobrescreverhashCode()para manter o contrato. - Estabilidade: O valor de
hashCode()para um objeto imutável deve permanecer constante durante toda a sua vida. Para objetos mutáveis, o código hash pode mudar, mas isso requer cautela ao usar em coleções de hash.
Exemplo de implementação básica em Kotlin:
data class User(val id: Long, val name: String)
// Para classes de dados, hashCode() e equals() são gerados automaticamente
Exemplo de implementação manual em Java (é importante combinar corretamente os valores):
class User {
private final long id;
private final String name;
public User(long id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
Objects.equals(name, user.name); // Usamos Objects.equals para evitar NullPointerException
}
@Override
public int hashCode() {
return Objects.hash(id, name); // Usamos Objects.hash para combinar os códigos hash
}
}