大家面试有被问到《Java中Comparable和Comparator区别》吗?
如果还不太清楚怎么回答,就随我往下看吧。
01Comparable和Comparator二者源码的区别
Comparable和Comparator这二者都是接口,我们先来看下他们内部都定义了什么方法让我们实现。
Comparable接口
Comparator接口
从源码上来看,Comparable接口内定义了一个compareTo方法,接收一个对象作为参数,返回一个int值。
而Comparator接口内则定义了一个compare方法,也是返回一个int值,但是接收的参数是两个同类型的参数。
从两个接口的命名我们可以大概看出二者的作用。
Comparable,中文意思为“可比较的”;
Comparator,中文意思则是“比较器”。
实现Comparable的类,实例化的对象是可以和同类型对象比较的。所以他的compareTo方法是一个参数,一个用来和自己进行比较的对象。
实现Comparator的类,实例化的对象则是用来作为裁判比较其他对象的。所以他的compare方法是两个参数,我们的裁判就是要比较这两个对象。
02Comparable和Comparator二者使用的区别
如果我们要对上面这个Student类的对象进行比较,比较的依据是依据age的大小进行比较。
先看看Comparable怎么实现。
在上面我们知道实现Comparable是表示自己是一个可以比较的。所以用Comparable的方式实现对Student的比较,就是让Student类自己去实现Comparable接口。
上面的代码实现了Comparable接口,那怎么比较呢,接着往下看吧。
用Comparable来实现比较功能清楚了。
再来看看用Comparator实现比较吧。
Student类恢复到之前没有实现Comparable接口的状态。
再通过实现Comparator接口来编写一个比较器。
接着看看这个比较器怎么来用。
Java中Comparable和Comparator区别就聊到这里了。
有初学的小伙伴,推荐大家看看这本书。