Hash Table
com Set
e uma Linked List
vinculada.Aqui, evitarei entrar em minúcias sobre o LinkedHashSet, uma vez que, no próprio código-fonte Java, é explicitamente indicado que o LinkedHashMap é, de certa maneira, confuso quanto ao seu funcionamento. Se até os engenheiros do Java consideram isso, quem sou eu para discordar? Além disso, como o LinkedHashSet se baseia no LinkedHashMap, a explanação fica um tanto desafiadora. Portanto irei simplificar, mantendo as informações essenciais para uma compreensão clara.
O LinkedHashSet representa uma estrutura de dados fascinante, assemelhando-se ao HashSet na prevenção de duplicatas, mas com uma distinção crucial: aqui, a ordem de inserção é preservada, ao contrário do HashSet convencional. Mas como essa façanha é alcançada? O LinkedHashSet utiliza tanto a tabela de hash quanto uma lista encadeada, sendo esta última responsável por manter a ordem de inserção. Em relação aos atributos, a essência reside nos seguintes pontos:
Nota: O desempenho do LinkedHashSet é ligeiramente inferior ao do HashSet, devido ao custo adicional associado à manutenção da lista encadeada.
Vamos agora examinar o mesmo exemplo utilizado no HashSet, porém com a distinção de que nossos dados agora se apresentam ordenados. Vale notar que, dada a maturidade esperada dos leitores, apresentarei o exemplo já contemplando colisões de hash:
var names = new LinkedHashSet<String>();
names.add("John Carmack");
names.add("Ea");
names.add("Cormen");
names.add("FB");
System.out.println(names);
[John Carmack, Ea, Cormen, FB]
Conforme observado, a ordem de inserção foi preservada. Pode ainda pairar alguma perplexidade quanto aos atributos after
e before
responsáveis por esse feito, mas sem preocupações; o diagrama oferece uma clara representação de como esses atributos desempenham esse papel.
imagem mental:
1
- Mantém a ordem de inserção dos elementos, além de fornecer acesso rápido.2
- Implementação simples de uma tabela de hash com uma lista encadeada vinculada.1
- Ligeiramente menos eficiente do que HashSet em termos de velocidade.2
- Ocupa ligeiramente mais espaço que HashSet devido à necessidade da lista encadeada vinculadaManutenção da ordem de inserção dos elementos em uma coleção semelhante ao HashSet.
Cenário de uso: Em um sistema de registro de eventos, um LinkedHashSet pode ser utilizado para armazenar eventos na ordem em que ocorreram, facilitando a análise cronológica.