По моему скромному мнению, ответ LazerBanana должен быть самым рейтинговым и принятым, потому что все остальные ответы, указывающие на java.util.TreeSet(или сначала преобразованные в список, а затем вызов Collections.sort(...)преобразованного списка), не удосужились спросить OP, какие объекты у вас HashSetесть, т.е. если эти элементы имеют предопределенный естественный порядок или нет, и это не дополнительный вопрос, а обязательный вопрос.
Вы просто не можете войти и начать помещать свои HashSetэлементы в TreeSetтип элемента, если он еще не реализует Comparableинтерфейс или если вы явно не переходите Comparatorк TreeSetконструктору.
Из TreeSetJavaDoc,
Создает новый пустой набор деревьев, отсортированный в соответствии с естественным порядком его элементов. Все элементы, вставленные в набор, должны реализовывать интерфейс Comparable. Кроме того, все такие элементы должны быть взаимно сопоставимы: e1.compareTo (e2) не должен вызывать исключение ClassCastException для любых элементов e1 и e2 в наборе. Если пользователь пытается добавить элемент в набор, который нарушает это ограничение (например, пользователь пытается добавить строковый элемент в набор, элементы которого являются целыми числами), вызов add вызовет исключение ClassCastException.
Вот почему только все ответы на основе потока Java8 - где вы определяете свой компаратор на месте - имеют смысл только потому, что реализация сопоставимого в POJO становится необязательной. Программист определяет компаратор по мере необходимости. Попытка собрать, TreeSetне задав этот фундаментальный вопрос, также неверна (ответ ниндзя). Предполагая , что типы объектов быть Stringили Integerтакже неправильно.
Сказав это, другие проблемы, такие как
- Производительность сортировки
- Memory Foot Print (сохранение исходного набора и создание новых отсортированных наборов каждый раз, когда выполняется сортировка или вы хотите отсортировать набор на месте и т. Д.)
должны быть и другие соответствующие моменты. Просто указывать на API не должно быть единственным намерением.
Поскольку исходный набор уже содержит только уникальные элементы, и это ограничение также поддерживается отсортированным набором, поэтому исходный набор должен быть очищен из памяти, поскольку данные дублируются.
HashSet- неупорядоченная коллекция.