OQUE É / COMO FUNCIONA
É uma coleção totalmente desordenada que não se pode pegar
valores com get(index), e só com os métodos: set.iterator();
iterator.hasNext(); iterator.next();
Usam o retorno do método hashCode() das classes Object (suas
filhas a implementam de acordo), visando uma velocidade por
comparação de hashs, e não por igualdade de referencia, etc…
CASOS DE USO (QUANDO USAR)
Um exemplo comum do uso constante do HashSet é em
mapeamentos OneToMany do Hibernate para garantir uma
agilidade na inserção de elementos, que faz-se necessário em
aplicações com uma grande quantidade de dados.
Outro exemplo é, se você receber um pedido para um
determinado código de fornecedor, você pode querer
verificar para garantir que o código do fornecedor pertence
ao conjunto de códigos de fornecedores.
Nesses casos, o HashSet<T> é útil para realizar consultas
super-rápidas onde a ordem não é importante.
OQUE É / COMO FUNCIONA
Conhecido por árvore negra, tem como sua principal caracteristica ser o unico Set
que implementa a interface SortedSet em vez de Set diretamente, mas de qualquer
forma SortedSet implementa Set, assim continuamos tendo os mesmo métodos no
TreeSet.
Por ele implementar o SortedSet ele possui elementos ordenados automaticamente.
Porém a complexidade para os métodos add, remove e contains são bem maiores
que do HashSet.
CASOS DE USO (QUANDO USAR)
TreeSet – Preserva a ordem natural dos elementos, porem
ocorre uma perda de performance na inserção e deleção
TreeSet utiliza-se de uma árvore Binária para alinhar os
elementos. Esse tipo de abordagem se mostra bastante
eficiente para procurar elementos, esta abordagem consta em
se varrer uma árvore balanceada, contudo se ponto fraco
reside justamente no balanceamento da árvore, que pode
gerar lentidão a depender da quantidade de elementos
existentes.
OQUE É / COMO FUNCIONA
LinkedHashSet – é derivada de HashSet, mas mantém uma lista duplamente
ligada através de seus itens. Seus elementos são iterados na ordem em que
foram inseridos. Opcionalmente é possível criar um LinkedHashSet que seja
percorrido na ordem em que os elementos foram acessados na última iteração.
Ela é um meio termo entre HashSet e TreeSet, ou seja, ela nos proporciona
uma boa performance e pode ser ordenada.
No LinkedHashSet os elementos continuam na ordem que são inseridos,
diferente do HashSet que “embaralha” tudo, é parecido com ArrayList.
Sua a complexidade também é O(1) para operações básicas, sendo assim,
adicionar (add), remover (remove) e verificar (contains), tem performace
semelhante ao HashSet.
Quando precisar de um Set ordenado, sugiro o uso do LinkedHashSet, pois
tem boa performance e ainda sim poder ser ordenada.