我看到该
Comparable
接口只允许实现该compareTo
方法。那么为什么我们甚至需要这个接口呢?为什么我们不能简单地在我们想要的任何类中定义和声明方法,而不必实现Comparable
接口?我知道这是正确的:
SortedSet<String> exampleSet = new TreeSet<String>();
<--TreeSet
实现SortedSet
接口。因此,如果我有一个名为 "Date
" 的类实现Comparable
,这是否正确:Comparable<Date> example = new Date<Date>();
. 如果是,我到底能得到什么?我的意思是我得到什么样的对象?它有什么属性?如果不是,为什么不呢?
问问题
1137 次
2 回答
2
为什么我们不能简单地在我们想要的任何类中定义和声明方法,而不必实现 Comparable 接口?
在这种情况下,您希望排序方法如何工作?
能够对任何元素都相互可比的集合进行排序真的很方便——而接口就是表达这一点的方式。
它是否正确:
Comparable<Date> example = new Date<Date>();
不,除非Date
它本身是通用的。你可以写:
Comparable<Date> example = new Date();
...但这样做会很奇怪。通常Comparable
由想要比较现有对象的代码使用 - 例如,它会从集合中获取值并将它们相互比较。
于 2013-02-07T20:17:20.570 回答
0
为什么我们不能简单地在我们想要的任何类中定义和声明方法,而不必实现 Comparable 接口?
有些Collections
喜欢TreeMap
,需要比较两个对象,即使是简单的add()
操作。这样的树需要在内部将“较小”的对象放入左侧树中,并在右侧子树中放入较大的对象(有点简化)。
因为这样的通用集合(如 TreeMap)被设计为适用于所有对象,所以对象必须知道如何执行 compareTo()。
HashMaps 等其他集合不需要对象实现 Comparable(它们使用hashcode
())
于 2013-02-07T20:30:04.457 回答