Der Grund, warum die meisten HashSet
ist, dass die Operationen (im Durchschnitt) O(1) statt O(log n) sind. Wenn die Menge Standardelemente enthält, müssen Sie sich nicht mit Hash-Funktionen herumschlagen, da dies bereits für Sie erledigt wurde. Wenn die Menge benutzerdefinierte Klassen enthält, müssen Sie Folgendes implementieren hashCode
zu verwenden HashSet
(obwohl Effective Java zeigt wie), aber wenn Sie eine TreeSet
Sie müssen es schaffen Comparable
oder liefern eine Comparator
. Dies kann ein Problem darstellen, wenn die Klasse keine bestimmte Reihenfolge hat.
Ich habe manchmal verwendet TreeSet
(oder eigentlich TreeMap
) für sehr kleine Mengen/Karten (< 10 Elemente), obwohl ich nicht überprüft habe, ob dies wirklich einen Vorteil bringt. Bei großen Mengen kann der Unterschied beträchtlich sein.
Wenn Sie nun das Sortierte brauchen, dann TreeSet
ist angemessen, obwohl selbst dann, wenn Aktualisierungen häufig sind und der Bedarf an einem sortierten Ergebnis selten ist, kann es manchmal schneller sein, den Inhalt in eine Liste oder ein Array zu kopieren und sie zu sortieren.