hashCode

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()); } }

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

[quote=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[/quote]

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.