На мою скромну думку, відповідь LazerBanana повинна бути найвищою оцінкою і прийнятою, оскільки всі інші відповіді, які вказують на java.util.TreeSet
(або спочатку переходять у список, а потім дзвонять Collections.sort(...)
у перетворений список), не намагалися запитати ОП, які саме об'єкти у вас HashSet
є, тобто якщо ці елементи мають заздалегідь визначене природне впорядкування, чи ні & це не є питанням необов'язковим, а обов'язковим.
Ви просто не можете увійти та почати вводити HashSet
елементи у формат TreeSet
if, якщо тип елемента ще не реалізує Comparable
інтерфейс або якщо ви явно не переходите Comparator
до TreeSet
конструктора.
Від TreeSet
JavaDoc,
Побудує новий, порожній набір дерев, відсортований за природним упорядкуванням його елементів. Усі елементи, вставлені в набір, повинні реалізовувати інтерфейс Порівняння. Крім того, всі такі елементи повинні бути взаємно порівнянні: e1.compareTo (e2) не повинен викидати ClassCastException для будь-яких елементів e1 та e2 у наборі. Якщо користувач намагається додати елемент до набору, який порушує це обмеження (наприклад, користувач намагається додати рядковий елемент до набору, елементи якого є цілими числами), виклик add викине ClassCastException.
Тому лише всі відповіді на основі потоку Java8 - де ви визначаєте компаратор на місці - мають сенс лише тому, що реалізація порівнянного в POJO стає необов'язковою. Програміст визначає компаратор як і коли це потрібно. Спроба зібратися, TreeSet
не задаючи цього фундаментального питання, також неправильна (відповідь Ніндзя). Припустимо, що типи об'єктів є String
або Integer
також є невірними.
Сказавши це, інші проблеми, такі як,
- Сортування продуктивності
- Друк на нозі пам’яті (зберігання оригінального набору та створення нових відсортованих наборів щоразу, коли сортування проводиться чи бажаєте сортувати набір за місцем тощо тощо)
повинні бути і інші відповідні моменти. Просто вказівка на API не повинна бути лише наміром.
Оскільки оригінальний набір вже містить лише унікальні елементи, а обмеження також підтримується відсортованим набором, тому оригінальний набір потрібно очистити з пам'яті, оскільки дані дублюються.
HashSet
- це не упорядкована колекція.