Membro desde: 27/10/2004 00:17:24
Mensagens: 90
Offline
Ola pessoal...
Quando criamos o seguinte tipo de codigo:
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
e
Obtemos como resultado true no println e no segundo trecho obtem-se um hashset com um elemento.
Os resultados são bem evidentes em função da maneira como a classe Integer trata o equals e a classe HashSet trata o add.
Porem se eu tiver as classes Objeto1, Objeto2 e Objeto3 como segue, verão que teremos problemas com o hashset, porque este irá adicionar os objetos que devem ser iguais.
Só pra lembrar: A classe HashSet não aceita um novo elemento se este já existir (comparação feita atraves do metodo equals).
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
Um hashset usa "hashCode", depois é que usa "equals". Você não sobreescreveu o método "hashCode". A implementação default de hashCode é a de Object, que retorna valores diferentes para objetos diferentes (mesmo que as suas variáveis de instância tenham valores iguais.)
Dica: Leia o Effective Java - lá o sr. Joshua Bloch manda você repetir 7 vezes por dia, de preferência ajoelhado e na direção de onde o sr. James Gosling estiver: "Quando implementar equals, implemente hashCode e vice-versa."
Dica 2: Um "hashset" não tem esse nome à toa. Você deveria ter desconfiado.