1
  1. 我看到该Comparable接口只允许实现该compareTo方法。那么为什么我们甚至需要这个接口呢?为什么我们不能简单地在我们想要的任何类中定义和声明方法,而不必实现Comparable接口?

  2. 我知道这是正确的:SortedSet<String> exampleSet = new TreeSet<String>();<--TreeSet实现SortedSet接口。因此,如果我有一个名为 " Date" 的类实现Comparable,这是否正确:Comparable<Date> example = new Date<Date>();. 如果是,我到底能得到什么?我的意思是我得到什么样的对象?它有什么属性?如果不是,为什么不呢?

4

2 回答 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 回答