Java:Comparable vs Comparator

day*_*mer 139 java comparable comparator

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

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

哪些情况比哪一种更受欢迎?

谢谢

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

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

And*_*ndy 187

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

一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象.

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

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

  • 可比较应该在对象内部实现.因此,使用compareTo方法为对象创建了一个依赖关系,它将隐含于比较对象的特定类型的实现.但是,比较器是外部化的,我们可以为同一个对象提供多种类型的比较器.还需要更正我的理解. (9认同)

Jus*_*ner 128

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

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

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

否则你可以使用Comparable.

  • **控制源**是这里的关键字. (41认同)
  • 您无法向从外部库中包含的类添加代码。Comparable 仅适用于您自己创建的类,因为您需要能够在类体内添加 compareTo() 方法。 (2认同)