Java:Comparable vs Comparator

时间:2010-11-05 17:51:57

标签: java comparator comparable

  

可能重复:
  difference between compare() and compareTo()
  Java: What is the difference between implementing Comparable and Comparator?

Comparable和Comparator之间的关键区别是什么?

哪种情况比其他情况更受欢迎?

由于

已更新 - 与示例有良好关系!!

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

2 个答案:

答案 0 :(得分:182)

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

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

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

简而言之,没有太大区别。他们是类似手段的两端。一般来说,自然顺序可以比较,(自然顺序定义显然可以解释),并为其他排序或比较需求编写比较器。

答案 1 :(得分:127)

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

Comparable允许您指定要比较的对象的实现方式。

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

否则您可以使用Comparable