是这样吗MyClass implements Comparable<MyClass>
?
如果没有,那就是为什么。
对于TreeSet
,您要么必须制作元素Comparable
,要么提供Comparator
. 否则TreeSet
无法运行,因为它不知道如何对元素进行排序。
请记住,TreeMap implements SortedSet
,因此它必须知道如何以一种或另一种方式对元素进行排序。
您应该熟悉实现如何为给定类型的对象Comparable
定义自然顺序。
该接口定义了一个方法,compareTo
如果该对象分别小于、等于或大于另一个对象,则该方法必须返回负整数、零或正整数。
合同要求:
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
- 它是及物的:
x.compareTo(y)>0 && y.compareTo(z)>0
暗示x.compareTo(z)>0
x.compareTo(y)==0
意味着sgn(x.compareTo(z)) == sgn(y.compareTo(z))
对于所有人z
此外,它建议:
(x.compareTo(y)==0) == (x.equals(y))
,即“符合equals
乍一看,这似乎很容易消化,但实际上定义总排序是很自然的。
如果您的对象不能以一种或另一种方式排序,那么 aTreeSet
就没有意义了。您可能想改用 a HashSet
,它有自己的合同。您可能需要@Override hashCode()
并equals(Object)
根据您的类型(请参阅:Overriding equals and hashCode in Java)