是否
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
乍一看似乎需要消化很多,但是对于定义总排序的方式确实很自然。
如果您的对象不能以一种或另一种方式进行排序,则
TreeSet没有意义。您可能要使用
HashSet具有自己的合同的a。您可能会被要求
@OverridehashCode()并且
equals(Object)适合您的类型(请参阅:Java中的覆盖equals和hashCode)



