TreeSet

3 respostas
D

Ola pessoal…estudando o pacote java.util.* , estava implementando algumas classes de teste…e me deparei com o seguinte problema…e queria confirmar a veracidade disso…

É possivel inserir elementos nulos em um HashSet…mas como o mesmo… não permite a duplicação de elementos… somente um elemento nulo pode ser inserido… OK ??

Collection set = new HashSet();

set.add(null); <-- return true;

set.add(null); <-- return false;

Depois parti para a implementação da classe TreeSet…e percebi que o mesmo nao aceita elementos nulos…

Collection treeset = new HashSet();
treeset.add(null); <-- compile error;

pq??

no livro da Kathy , nao fala nada sobre isso…existe mais alguma outra classe que tbm nao possa receber elementos nulos , fora “Hastable” ??

Obrigado.

3 Respostas

D

ola pessoal…somente fazendo uma correção…pois eu copiei errado na hora e escrever o exemplo…

no segundo exemplo…não é :

e sim :

:smiley:

Rafael_Steil

Internamente o HashSet usa um HashMap para guardar os valores, e HashMaps suportam keys nulas. A primeira vez que vc adiciona uma key, o retorno o add() eh true pq a key nao existia antes. Qdo vc adiciona a mesma key novamente, ele retorna false pq a verificacao eh feita da seguitne forma:

...
public boolean add&#40;Object o&#41; &#123;
    return map.put&#40;o, PRESENT&#41; == null;
&#125;
...

onde “PRESENT” eh um objeto interno do tipo Object, que nao interfere no teu trabalho.

Vc nao pode adicionar nulos em um TreeSet pq, como vc deve ter visto, ele mantem a ordem dos itens inseridos, ao contrario de um HashSet. Intermamente o TreeSet uma um SortedMap para guardar os valores, e a especificacao do SortedMap diz que toda key inserida deve implementar Comparable. E null nao implementa comparable :wink:

Rafael

D

falou e disse…ta entendido…!!
Valeu rafael!!

:smiley:

Criado 22 de abril de 2004
Ultima resposta 24 de abr. de 2004
Respostas 3
Participantes 2