Meiner bescheidenen Meinung nach sollte die Antwort von LazerBanana die am besten bewertete Antwort sein und akzeptiert werden, da alle anderen Antworten, die auf java.util.TreeSet
(oder zuerst in eine Liste konvertieren, dann Collections.sort(...)
die konvertierte Liste aufrufen ) verweisen , OP nicht gefragt haben, welche Art von Objekten Sie HashSet
haben, d. H. ob diese Elemente eine vordefinierte natürliche Reihenfolge haben oder nicht & das ist keine optionale Frage, sondern eine obligatorische Frage.
Sie können einfach nicht hineingehen und Ihre HashSet
Elemente in eine Schnittstelle einfügen, TreeSet
wenn der Elementtyp noch keine Comparable
Schnittstelle implementiert oder wenn Sie nicht explizit an Comparator
den TreeSet
Konstruktor übergeben.
Von TreeSet
JavaDoc,
Erstellt eine neue, leere Baumgruppe, die nach der natürlichen Reihenfolge ihrer Elemente sortiert ist. Alle in die Menge eingefügten Elemente müssen die Schnittstelle Comparable implementieren. Darüber hinaus müssen alle diese Elemente miteinander vergleichbar sein: e1.compareTo (e2) darf keine ClassCastException für Elemente e1 und e2 in der Menge auslösen. Wenn der Benutzer versucht, der Menge ein Element hinzuzufügen, das gegen diese Einschränkung verstößt (z. B. versucht der Benutzer, einer Menge, deren Elemente Ganzzahlen sind, ein Zeichenfolgenelement hinzuzufügen), löst der Aufruf add eine ClassCastException aus.
Aus diesem Grund sind nur alle auf Java8-Streams basierenden Antworten - bei denen Sie Ihren Komparator vor Ort definieren - nur sinnvoll, da die Implementierung von vergleichbaren Antworten in POJO optional wird. Der Programmierer definiert den Komparator nach Bedarf. Der Versuch, TreeSet
ohne diese grundlegende Frage zu sammeln , ist ebenfalls falsch (Ninjas Antwort). Angenommen, Objekttypen sind String
oder Integer
sind auch falsch.
Allerdings sind andere Bedenken wie:
- Sortierleistung
- Speicher-Fußabdruck (Beibehalten des ursprünglichen Satzes und Erstellen neuer sortierter Sätze jedes Mal, wenn die Sortierung durchgeführt wird oder wenn der Satz an Ort und Stelle sortiert werden soll usw. usw.)
sollten auch die anderen relevanten Punkte sein. Nur auf API zu zeigen, sollte nicht nur Absicht sein.
Da der Originalsatz bereits nur eindeutige Elemente enthält und diese Einschränkung auch durch den sortierten Satz beibehalten wird, muss der Originalsatz aus dem Speicher gelöscht werden, da Daten dupliziert werden.
HashSet
ist eine ungeordnete Sammlung.