Na minha humilde opinião, a resposta de LazerBanana deve ser a resposta mais bem avaliada e aceita porque todas as outras respostas que apontam para java.util.TreeSet
(ou primeiro converta para lista e depois chame Collections.sort(...)
a lista convertida) não se preocuparam em perguntar a OP como que tipo de objetos você HashSet
tem. se esses elementos têm uma ordem natural predefinida ou não e essa não é uma questão opcional, mas uma questão obrigatória.
Você simplesmente não pode entrar e começar a colocar seus HashSet
elementos em um TreeSet
tipo de elemento if ainda não implementa a Comparable
interface ou se você não estiver passando explicitamente Comparator
para o TreeSet
construtor.
Do TreeSet
JavaDoc,
Constrói um novo conjunto de árvore vazio, classificado de acordo com a ordem natural de seus elementos. Todos os elementos inseridos no conjunto devem implementar a interface Comparable. Além disso, todos esses elementos devem ser mutuamente comparáveis: e1.compareTo (e2) não deve lançar uma ClassCastException para quaisquer elementos e1 e e2 no conjunto. Se o usuário tentar adicionar um elemento ao conjunto que viole essa restrição (por exemplo, o usuário tenta adicionar um elemento de string a um conjunto cujos elementos são inteiros), a chamada add lançará uma ClassCastException.
É por isso que apenas todas as respostas baseadas em fluxo Java8 - onde você define seu comparador no local - só fazem sentido porque implementar comparável em POJO se torna opcional. O programador define o comparador como e quando necessário. Tentar coletar TreeSet
sem fazer essa pergunta fundamental também é incorreto (resposta de Ninja). Supondo que os tipos de objeto sejam String
ou Integer
também estejam incorretos.
Dito isso, outras preocupações como,
- Desempenho de classificação
- Memory Foot Print (mantendo o conjunto original e criando novos conjuntos classificados cada vez que a classificação é feita ou deseja classificar o conjunto no local etc etc)
devem ser os outros pontos relevantes também. Apenas apontar para a API não deve ser apenas uma intenção.
Como o conjunto original já contém apenas elementos únicos e essa restrição também é mantida pelo conjunto classificado, o conjunto original precisa ser apagado da memória, uma vez que os dados são duplicados.
HashSet
é uma coleção não ordenada.