最近在学习java初级的内容,碰巧用到这两个接口,于是搜集资料写下这篇文章,以加深自己对于Comparable、Comparator这两个接口的认识,希望能够帮到你~
一、Comparable简介
该接口位于java.lang包下面,含有compareTo一个抽象方法,当比较两个自定义类对象时往往会使用该接口,使用时注意要重写compareTo方法,且对对象类进行修改(类名 implements Comparable<参数类型>)。
compareTo方法有两个参数object1和object2,分别表示待比较的两个对象,方法返回值为int,有一下三种情况:
1、object1大于object2,返回正整数
2、object1等于object2,返回0
3、object1小于object3,返回负整数
关于Comparable的详细用法可以看以下例子:
二、Comparator简介
该接口位于java.util包下面,内部含有多个抽象方法,其中compare方法和Comparable 中的compareTo方法类似,用于两个对象的排序(默认升序),有两个参数object1和object2,分别表示待比较的两个对象,方法返回值为int,有一下三种情况:
1、object1大于object2,返回正整数
2、object1等于object2,返回0
3、object1小于object3,返回负整数
该接口常常在没有实现Comparable接口、不能对对象类进行修改以及需要使用特定的排序方式(如降序)时使用,使用该方法往往不需要对类进行修改。
关于Comparator的详细用法可以看以下例子:
!注意在使用该接口类时,Comparator比较器将作为参数递交给工具类的sort()方法
三、Comparable和Comparator的不同
1.所在的包不同,Comparable属于java.lang包,Comparator属于java.util包
2.包含的抽象方法不同,Comparable只包含compareTo方法,Comparator包含compare、reversed等多个抽象方法,排序方式更加灵活多样
3.使用方法不同,comparable在使用时要对对象类做出修改,Comparator则不用
4.用Comparable接口时,必须要重写compareTo方法,而Comparable接口可以在类的外部使用,使用时要将该接口作为参数传递给Arrays.sort()方法或Collections()方法进行排序