Considerando que o LinkedHashSet contém as características do HashSet + a ordenação dos elementos, ele não seria mais vantajoso?
Considerando que o LinkedHashSet contém as características do HashSet + a ordenação dos elementos, ele não seria mais vantajoso?
Opa Caroline, tudo tranquilo?
Veja bem, o LinkedHashSet realmente pega um pouco dos dois mundos. Porém, ao mesmo tempo que essa implementação possui um desempenho quase similar ao HashSet, veja que ele ainda "perde" para o TreeSet no quesito ordenação, dependendo do que queremos fazer. E o pulo do gato está na forma como ele ordena seus elementos!
Veja que diferente do TreeSet, que ordena seus elementos inseridos de acordo com um Comparator
(ou por ordem natural), o LinkedHashSet simplesmente mantém a ordem de inserção dos elementos à medida que são inseridos. Para ver na prática a vantagem do TreeSet, eu recomendo você fazer o exercício proposto na última atividade dessa aula, onde ordenamos uma lista de funcionários de acordo com suas idades.
Vou deixar aqui alguns pontos importantes que talvez ajudem a esclarecer as diferenças entre essas implementações. Essas e mais informações podem ser encontradas nesse endereço (site em inglês).
Ordem dos Elementos
O HashSet não mantém nenhuma ordem de elementos.
LinkedHashSet mantém a ordem de inserção dos elementos. ou seja, os elementos são colocados à medida que são inseridos.
TreeSet ordena os elementos de acordo com o Comparador fornecido. Se nenhum comparador for fornecido, os elementos serão colocados em sua ordem ascendente natural.
Desempenho
HashSet oferece melhor desempenho do que LinkedHashSet e TreeSet.
O desempenho de LinkedHashSet está entre HashSet e TreeSet. Seu desempenho é quase semelhante ao HashSet. Mas um pouco no lado mais lento, pois também mantém LinkedList internamente para manter a ordem de inserção dos elementos.
TreeSet oferece menos desempenho do que HashSet e LinkedHashSet, pois tem que classificar os elementos após cada operação de inserção e remoção.
Quando usar?
Use HashSet se você não quiser manter nenhuma ordem de elementos.
Use LinkedHashSet se quiser manter a ordem de inserção dos elementos.
Use TreeSet se quiser classificar os elementos de acordo com algum Comparador.
Bom, acho que é isso. Se ficou alguma dúvida é só avisar!
Abraços e bons estudos!!