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接口则用于一个类的扩展排序。