156

可能的重复:
compare() 和 compareTo()
之间的区别 Java:实现 Comparable 和 Comparator 有什么区别?

Comparable 和 Comparator 之间的主要区别是什么。

在什么情况下哪个比另一个更受欢迎?

谢谢

更新 - 与示例的良好链接!

http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

4

2 回答 2

207

当您的类实现Comparable时,compareTo该类的方法正在定义该对象的“自然”顺序。.equals()该方法在合同上有义务(尽管没有要求)与该对象上的其他方法保持一致,例如当比较返回 true时,应始终为对象返回 0 。

Comparator是它自己对如何比较两个对象的定义,可用于以可能不符合自然顺序的方式比较对象。

例如,字符串通常按字母顺序进行比较。因此"a".compareTo("b")将使用字母比较。如果您想比较字符串的长度,则需要编写一个自定义比较器。

简而言之,没有太大区别。它们都是类似手段的目的。通常为自然顺序实现可比较(自然顺序定义显然可以解释),并为其他排序或比较需求编写比较器。

于 2010-11-05T18:09:52.290 回答
145

Comparator为您提供了一种为您无法控制的类型提供自定义比较逻辑的方法。

Comparable允许您指定如何比较您正在实现的对象。

显然,如果您无法控制某个类(或者您想提供多种方法来比较您确实可以控制的对象),请使用Comparator.

否则你可以使用Comparable.

于 2010-11-05T17:52:41.270 回答