Questão referente a hashCode e equals

1 resposta
D

Pessoal,

Fiquei um pouco confuso com o uso do hashCode no Java, eu sei o conceito de tabela hash, sei o conceito colisão de códigos hash (utilizando listas para auxilio), sei o conceito de re-hash, mas não entendo os metodos que o eclipse gera para trabalhar com os mesmos.

Quando digito ALT+SHIFT+S, o eclipse me permite criar o metodo equals() e o metodo hashCode() para meus atributos privados.

No metodo hashCode() ele cria uma soma/multiplicação que gera o hashcode de cada entrada, enquanto no equals(), ele simplismente compara um, ou mais atributos dos objetos em questão.

Dai vem minha dúvida, ok, eu posso gerar o hashCode das minhas entradas (seja nome, telefone etc…) e compará-las, MAS e se houver colisão? ou seja, tenho mais de um registro com o mesmo hashCode.

Supondo, tenho dois nomes armazenados em uma estrutura de dados qualquer, na hora que vou comparar um terceiro nome com esses dois, qualquer um deles serviria, mas eles são diferentes, como procedo?

grato

1 Resposta

mrrbigu

Na verdade são coisas distintas, no hashcode pode haver colisão, já no equals, você tem que colocar todos os campos que identificam esse registro como único, mesmo que o hashcode dos campos nome e cpf sejam iguais, no equals ele vai comparar os nomes e os números de cpf e verificar que são distintos.
Você pode pensar numa tabela hash como um conjunto de listas numeradas onde o número de cada uma é o hashcode dos objetos que nela estão armazenados, quando você buscar um objeto ele vai calcular seu hash e descobrir qual o número da lista em que ele está, então apenas dentro dessa lista ele busca objeto por objeto usando o equals até encontrar o correto, o que é muito mais rápido que colocar todos os dados em uma só lista e buscar usando o equals. Essa é a principal utilidade do hashcode.

Criado 5 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 1
Participantes 2