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