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ê HashSettem. 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 HashSetelementos em um TreeSettipo de elemento if ainda não implementa a Comparableinterface ou se você não estiver passando explicitamente Comparatorpara o TreeSetconstrutor.
Do TreeSetJavaDoc,
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 TreeSetsem fazer essa pergunta fundamental também é incorreto (resposta de Ninja). Supondo que os tipos de objeto sejam Stringou Integertambé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.