Java:比较与比较器

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

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

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

谢谢

更新 – 与例如良好的链接!

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

当您的类实现Comparable时 ,类的compareTo方法将定义该对象的“自然”sorting。 该方法在合同中有义务(尽pipe不是要求)与该对象上的其他方法一致,例如,当.equals()比较返回true时,总是返回0。

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

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

总之,没有太大的区别。 他们都以类似的手段结束。 一般自然顺序的实现可以比较,(自然顺序的定义显然是可以解释的),并为其他sorting或比较需求编写一个比较器。

Comparator为您提供了一种方法,可以为您无法控制的types提供自定义比较逻辑。

Comparable允许你指定你正在执行的对象是如何被比较的。

显然,如果你不能控制一个类(或者你想提供多种方法来比较你可以控制的对象),那么使用Comparator

否则,你可以使用Comparable