Diferenças na ordenação de HashSet

oi

fazendo um teste aqui me deparei com a seguinte situação

[code]Set strs = new HashSet();
strs.add(“C”);
strs.add(“A”);
strs.add(“B”);
strs.add(“C”);
strs.add(“C”);

for (Iterator iterator = strs.iterator(); iterator.hasNext():wink: {
String string = (String) iterator.next();
System.out.print(string+" ");
}
[/code]

utilizando java5 o resultado é A C B

utilizando java6 o resultado é A B C

segundo o tutorial HashSet garante apenas que não existe duplicidade - característica básica de Set - mas não ordenação, nesse caso eu poderia usar TreeSet - estrutura em árvore - ou LinkedHashSet

na verdade o add do HashSet internamente faz isso, onde map é um HashMap

public boolean add(E o) { return map.put(o, PRESENT)==null; }

olhei o source das duas versões, java5 e java6 e não vi diferenças de implementação, também busquei diferenças na implementação do interator e não vi nada de diferente

alguém poderia dizer porque da diferença??

abs

Bom, se dá diferente, então é mais um motivo para você não confiar na ordem.
Talvez haja alguma diferença no cálculo do hashCode na classe String nas duas versões, ou então o fator de carga (tamanho inicial do array interno onde são armazenadas as chaves do Hash table) seja um pouco diferente.

pois é como o thingol falou ^^ … a diferença pode estar na classe string, ou ate mesmo nos maps, ou em algum outro lugar de uma versão pra outra…

so seguir o diagrama => http://sergiotaborda.files.wordpress.com/2008/07/escolhacollection2.png
e ser feliz ^^

oi

sei que não posso confiar na ordenação do HashSet, a minha dúvida era achar onde eu tenho a diferença na implementação das versões que acarreta uma mudança na ordenação

o hashCode das duas versões de String são iguais, com relação ao parâmetro que o thingol falou nas duas versões de HashMap eu tenho DEFAULT_INITIAL_CAPACITY, MAXIMUM_CAPACITY e DEFAULT_LOAD_FACTOR também iguais e as validações no construtor também são iguais

para saber o que muda eu teria que debugar mesmo o fonte, se estiver curioso

legal o diagrama do Sérgio