hashCode, algumas dúvidas

4 respostas
FernandoCartaxo

Olá galera, estou com algumas dúvidas em relação ao hashCode.

Eu sobreescrevo ele na minha classe da seguinte maneira

public int hashCode(){
StringBuffer sb = new StringBuffer();
sb.append(this.codigo);
sb.append("-");
sb.append(this.numero);
return sb.hashCode();
}

faço isso para não ter que usar fórmulas e mais fórmulas, concateno tudo com um char que indica o fim de um atributo e o inicio de outro e peço pelo hashCode daquela StringBuffer;

Agora, as minhas dúvidas:
Está correto esse método? Posso usar assim que terei o resultado certo?
Ao meu ver… e acho que estou errado, se eu concatenar os mesmos valores eu deverei ter o mesmo hashCode, por exempo:

StringBuffer a = new StringBuffer();
a.append("teste");
System.out.println(a.hashCode());

StringBuffer b = new StringBuffer();
b.append("teste");
System.out.println(b.hashCode());

Deveria me retornar hashCodes iguais, certo?
PS: não retorna iguais.

Outra dúvida, qual a principal função do hashCode? Em que ocasiões eu utilizo ele?

Se não fui claro em algum ponto, por favor fale, que tentarei ser mais coezo

4 Respostas

ViniGodoy

Dá uma lida nesse tópico (e, especialmente, no link indicado no tópico):
http://www.guj.com.br/posts/list/52485.java#276120

A regra básica para usar um hashCode corretamente é:
Se a.equals(b) então a.hashCode() == b.hashCode()

FernandoCartaxo

ViniGodoy:
Dá uma lida nesse tópico (e, especialmente, no link indicado no tópico):
http://www.guj.com.br/posts/list/52485.java#276120

A regra básica para usar um hashCode corretamente é:
Se a.equals(b) então a.hashCode() == b.hashCode()

joia… então o que eu fiz está certo… se dois objetos forem iguais o StringBuffer também será igual e logo o hashCode também, correto?

mas aqui aparecem números de hashCode diferentes…

RafaelRio

Sugestão: utilize a classe HashCodeBuilder da Commons Lang.

ViniGodoy

Eu também implementei uma classezinha para hashs, baseado no Joshua Bloch. Se quiser, coloquei em anexo.

Tem explicação de como usar no Javadoc da própria classe.

Criado 6 de maio de 2007
Ultima resposta 7 de mai. de 2007
Respostas 4
Participantes 3