我看到Comparable
接口只允许实现compareTo
方法。那为什么我们甚至需要这个界面呢?为什么我们不能在我们想要的任何类中定义和声明方法,而不必实现Comparable
接口?
我知道这是正确的:SortedSet<String> exampleSet = new TreeSet<String>();
&lt; - TreeSet
实现了SortedSet
接口。所以如果我有一个名为&#34; Date
&#34;实现Comparable
的方法是正确的:Comparable<Date> example = new Date<Date>();
。如果是的话,我到底得到了什么?我的意思是我得到什么样的物品?它有什么属性?如果没有,为什么不呢?
答案 0 :(得分:2)
为什么我们不能简单地在我们想要的任何类中定义和声明该方法,而不必实现Comparable接口?
在这种情况下,您期望排序方法如何工作?
能够对任何元素彼此具有可比性的集合进行排序非常方便 - 界面就是表达它的方式。
这是正确的:
Comparable<Date> example = new Date<Date>();
不,除非Date
本身是通用的。你可以写:
Comparable<Date> example = new Date();
......但这样做会很奇怪。通常,Comparable
由想要比较现有对象的代码使用 - 因此它会从集合中获取值并将它们相互比较,例如。
答案 1 :(得分:0)
为什么我们不能简单地在任何类中定义和声明方法 想要,而不必实现Comparable接口?
某些Collections
与TreeMap
类似,需要比较两个对象,即使对于简单的add()
操作也是如此。这样的树需要在内部将“较小”的对象放在左侧树中,并且在右侧子树中放大(稍微简化一点)。
因为这样的通用Collection(如TreeMap),设计用于所有对象,Object,然后必须知道如何执行compareTo()。
其他集合(如HashMaps)不需要Objects实现Comparable(他们使用hashcode
())