Comparator | Comparable |
---|---|
位于java.util包 | 位于java.lang包 |
在要比较的类的外部实现该接口 | 在要比较的类上实现该接口 |
调用sort方法时,要指定Comparator的实现类 | 调用sort方法时,只需指定集合名即可 |
Comparable和Comparator的区别
1
、
Comparator
接口位于
java.util
包下,
Comparable
接口位于
java.lang
包下
2
、对于
Comparator
接口,它的
compare()
方法参数是两个对象,
可以有一个单独的类实现
Comparator
对于
Comparable
接口,它的方法只有一个对象作为参数,所以要比较的类需要实现
Comparable
接口,将当前对象与方法参数中的对象进行比较。
因此,如果使用
Comparator
接口,那么要比较的类和实现
Comparator
接口的类可以分开,如果使用
Comparable
接口,那么要比较的类就要实现
Comparable
接口才可以。
3
、关于应用场景
一般情况下如果对某个类进行排序,比如
Cat
类,如果使用
Comparable
接口的方式,那么
Cat
类需要实现
Comparable
接口。
如果
Cat
类通过
Comparable
接口的方式实现排序,比如通过
name
排序了。那么我们还希望通过
age
进行排序,这时不希望修改
Cat
类,那此时就需要使用
Comparator
接口了
因此,
Comparable
接口可以作为实现类的默认排序算法,
Comparator
接口则用于一个类的扩展排序。