为什么Java'Comparable'比使用compareTo方法更好?

时间:2013-02-07 20:15:25

标签: java comparable compareto

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

  2. 我知道这是正确的:SortedSet<String> exampleSet = new TreeSet<String>();&lt; - TreeSet实现了SortedSet接口。所以如果我有一个名为&#34; Date&#34;实现Comparable的方法是正确的:Comparable<Date> example = new Date<Date>();。如果是的话,我到底得到了什么?我的意思是我得到什么样的物品?它有什么属性?如果没有,为什么不呢?

2 个答案:

答案 0 :(得分:2)

  

为什么我们不能简单地在我们想要的任何类中定义和声明该方法,而不必实现Comparable接口?

在这种情况下,您期望排序方法如何工作?

能够对任何元素彼此具有可比性的集合进行排序非常方便 - 界面就是表达它的方式。

  

这是正确的:Comparable<Date> example = new Date<Date>();

不,除非Date本身是通用的。你可以写:

Comparable<Date> example = new Date();

......但这样做会很奇怪。通常,Comparable由想要比较现有对象的代码使用 - 因此它会从集合中获取值并将它们相互比较,例如。

答案 1 :(得分:0)

  

为什么我们不能简单地在任何类中定义和声明方法   想要,而不必实现Comparable接口?

某些CollectionsTreeMap类似,需要比较两个对象,即使对于简单的add()操作也是如此。这样的树需要在内部将“较小”的对象放在左侧树中,并且在右侧子树中放大(稍微简化一点)。
因为这样的通用Collection(如TreeMap),设计用于所有对象,Object,然后必须知道如何执行compareTo()。

其他集合(如HashMaps)不需要Objects实现Comparable(他们使用hashcode())