为什么Comparable会修改原始数据,而Comparator不会在Collection框架中

时间:2016-03-22 06:38:55

标签: java collections comparator comparable

在Collection框架中, 我知道Comparable提供单一排序序列 而 比较器提供多个排序顺序 但我无法理解一个界面如何修改原始数据而另一个界面没有?

2 个答案:

答案 0 :(得分:2)

Comparable没有做任何事情,它是一个界面。它强制你的对象实现方法" compareTo'。这允许将对象与另一个对象进行比较。 https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

Comparator没有做任何事情,它是另一个界面。它强制您的对象实施方法'比较'。这允许对象比较两个其他对象。注意区别:要比较和比较。 https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

此链接非常非常好地解释了对象排序接口。有例子和一切。 https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

答案 1 :(得分:0)

Comparable只能在原始类上实现,因此只能有一个实现(除非您使用子类覆盖compareTo)。同时,不需要在原始类上实现Comparator,因此可以有很多实现。

您的第二种情况与第一种情况有很大不同,因为compare可以访问三个Dog实例(this,参数#1和参数#2),而compareTo只能访问两个Dog实例(this和参数#1)。