hashCode

2 respostas
W

Pessoal,
O resultado desta código é = 1 , alguem poderia me explicar o pq ?

import java.util.*; class Prova{ String nome; Prova(String nome) {this.nome = nome;} public int hashCode() {return 2;} public boolean equals(Object o) {return true;} } class TesteProva { public static void main(String ... args) { Set<Prova> set = new HashSet<Prova>(); set.add(new Prova("SCJP")); set.add(new Prova("SCJD")); set.add(new Prova("SCJP")); System.out.println(set.size()); } }

2 Respostas

M

Uma implementação de SET é um conjunto. E como conjunto, não considera elemtentos repetidos. Ou seja: A={1, 3, 3} e B={1,3} São dois conjuntos com os mesmos elementos. E a soma dos elemtos de A é dois!!!
Ocorre que o HashSet muito provavelmente usa o método equals ou do objeto para compará-lo a outro. Como o método equals foi reescrito para a classe Prova, para retornar sempre true. Os Objetos desta classe serão sempre considerados “iguais” e teremos um conjunot sempre unitário!
O método hashCode que originalmente pertite obter o código de Hash do objeto (usado também para comparar) foi igualmente reescrito.
Acho que é isso!!!
Aquele abraço!
San

TangZero

malsan:
Uma implementação de SET é um conjunto. E como conjunto, não considera elemtentos repetidos. Ou seja: A={1, 3, 3} e B={1,3} São dois conjuntos com os mesmos elementos. E a soma dos elemtos de A é dois!!!
Ocorre que o HashSet muito provavelmente usa o método equals ou do objeto para compará-lo a outro. Como o método equals foi reescrito para a classe Prova, para retornar sempre true. Os Objetos desta classe serão sempre considerados “iguais” e teremos um conjunot sempre unitário!
O método hashCode que originalmente pertite obter o código de Hash do objeto (usado também para comparar) foi igualmente reescrito.
Acho que é isso!!!
Aquele abraço!
San

Você acha? Pois está completamente certo.

Os sets utilizam os métodos equals e hashCode para identificar e organizar os seus elementos internos. Como os sets não aceitam elementos duplicados e, nesse caso, “tudo é a mesma coisa”, só haverá um elemento dentro do set.

Criado 6 de junho de 2008
Ultima resposta 7 de jun. de 2008
Respostas 2
Participantes 3