Ist MyClass implements Comparable<MyClass>
oder etwas ähnliches?
Wenn nicht, dann deshalb.
Für TreeSet
müssen Sie entweder die Elemente Comparable
eingeben oder eine Comparator
angeben. Ansonsten kann TreeSet
nicht funktionieren, da es nicht wissen würde, wie man die Elemente anordnet.
Denken Sie daran, TreeMap implements SortedSet
, so muss es wissen, wie die Elemente auf die eine oder andere Weise zu bestellen.
Sie vertraut machen sollten, sich mit, wie die Umsetzung Comparable
definiert natürliche Ordnung für Objekte eines bestimmten Typs.
Die Schnittstelle definiert eine Methode, compareTo
, die eine negative Ganzzahl, Null oder eine positive Ganzzahl zurückgeben muss, wenn dieses Objekt kleiner, gleich oder größer als das jeweils andere Objekt ist.
Der Vertrag erfordert dass:
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
- es transitiv ist:
x.compareTo(y)>0 && y.compareTo(z)>0
impliziert x.compareTo(z)>0
x.compareTo(y)==0
impliziert, dass sgn(x.compareTo(z)) == sgn(y.compareTo(z))
für alle z
Zusätzlich ist es empfiehlt dass:
(x.compareTo(y)==0) == (x.equals(y))
, das heißt „im Einklang mit equals
Dieses viel erscheinen mag auf den ersten verdauen, aber es ist wirklich ganz natürlich mit wie eine totale Ordnung definiert.
Wenn Ihre Objekte können nicht eine oder andere Weise bestellt werden, dann wäre ein TreeSet
keinen Sinn. Vielleicht möchten Sie stattdessen einen HashSet
verwenden, der eigene Verträge hat. Sie sind wahrscheinlich zu @Override hashCode()
und equals(Object)
als geeignet für Ihre Art erforderlich werden (siehe: Overriding equals and hashCode in Java)
MyClass implementiert nicht vergleichbar. Ich möchte nur ein Set verwenden, um die eindeutigen Elemente der Liste zu filtern, da meine Liste unnötige Duplikate enthält. – Chuck
Verwenden Sie dann ein HashSet. Es versucht nicht, die Elemente zu sortieren. –