解答
Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象。
Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。
这么久了终于弄明白这个问题
这道题出得真好
不错,值得学习参考
看comparable和comparator的源码可以知道,
1.他们返回的类型不一样,一个返回int型,一个返回boolean
2.比较的东西不一样,一个在类内部比较,一个在外部比较
二者均是对集合进行比较和排序的接口。不同点是:
comparable接口是在内部类通过重写compareTo方法实现的,而comparator接口则是在外部类通过重写compare与equal方法实现的。
comparable接口实现较简单,但对于多元素排序不方便,因为在重写compareTo方法时事先定义好了元素比较顺序;comparator接口实现较复杂,可能定义多个外部类,但对于多元素使用起来很方便。
comparable接口和comparator接口都是用来实现集合元素的比较和排序的。两者的区别就在于两者的实现方法不同。对于排序的依据元素,分为两种情况:
对于单元素的类:int,float,double,char,String等数据类型,排序依据就是它相应的这个单元素。
对于多元素的类:例如,我们定义一个Student类,它的属性有int类型的age和String类型的name等,这时候就需要我们自己指定一个排序依据元素。
下面通过代码来体现两者在多元素的类的时候的不同。