Moim skromnym zdaniem odpowiedź LazerBanana powinna być najwyżej ocenioną odpowiedzią i zaakceptowaną, ponieważ wszystkie inne odpowiedzi wskazujące java.util.TreeSet
(lub najpierw przekonwertowane na listę, a następnie wywołane Collections.sort(...)
na przekonwertowanej liście) nie zadały sobie trudu, aby zapytać OP, jakiego rodzaju obiekty masz HashSet
, tj. czy te elementy mają predefiniowany porządek naturalny, czy nie, i nie jest to pytanie opcjonalne, ale pytanie obowiązkowe.
Po prostu nie możesz wejść i zacząć umieszczać swoich HashSet
elementów w TreeSet
typie elementu if nie implementuje jeszcze Comparable
interfejsu lub jeśli nie przekazujesz jawnie Comparator
do TreeSet
konstruktora.
Z TreeSet
JavaDoc,
Konstruuje nowy, pusty zestaw drzew, posortowany zgodnie z naturalnym uporządkowaniem jego elementów. Wszystkie elementy wstawiane do zestawu muszą implementować interfejs Comparable. Ponadto wszystkie takie elementy muszą być wzajemnie porównywalne: e1.compareTo (e2) nie może zgłaszać wyjątku ClassCastException dla żadnych elementów e1 i e2 w zestawie. Jeśli użytkownik spróbuje dodać element do zestawu, który narusza to ograniczenie (na przykład użytkownik próbuje dodać element ciągu do zestawu, którego elementy są liczbami całkowitymi), wywołanie add zwróci ClassCastException.
Dlatego tylko wszystkie odpowiedzi oparte na strumieniu Java8 - gdzie definiujesz swój komparator na miejscu - mają sens tylko dlatego, że implementacja porównywalnego w POJO staje się opcjonalna. Programista definiuje komparator w razie potrzeby. Próba zebrania się TreeSet
bez zadawania tego podstawowego pytania jest również niepoprawna (odpowiedź Ninja). Zakładanie, że typy obiektów są String
lub Integer
też są nieprawidłowe.
To powiedziawszy, inne obawy, takie jak:
- Wydajność sortowania
- Memory Foot Print (zachowywanie oryginalnego zestawu i tworzenie nowych posortowanych zestawów za każdym razem, gdy sortowanie jest wykonywane lub chcesz posortować zestaw na miejscu itp.)
powinny być również inne istotne punkty. Samo wskazanie na API nie powinno być tylko intencją.
Ponieważ oryginalny zestaw zawiera już tylko unikalne elementy i to ograniczenie jest również utrzymywane przez posortowany zestaw, więc oryginalny zestaw musi zostać usunięty z pamięci, ponieważ dane są zduplikowane.
HashSet
to nieuporządkowana kolekcja.