JAVA——Comparable和Comparator的异同

Comparable接口


  • 使用场景:用于集合中类型相同对象的比较,实现接口后重写comparaTo方法


  • 比较规则的制定:在类里重写CompataTo方法,方法里规定了比较规则

当一个类实现了Comparable接口之后,也就重写了compareTo方法,compareTo方法的原型如下:

Class Good{

@Override
    //比较的参数也是Good类型,说明比较的是同一类对象
    public int compareTo(Good good) {
    /**
     * 填写你的比较规则,默认返回0
     * 返回1:当前对象比要比较的对象大,排序时放在该对象后
     * 返回0:当前对象比要比较的对象相等,排序时按照原来顺序,不排序
     * 返回-1:当前对象比要比较的对象小,排序时放在该对象前
     */
     return 0;  
    }
}

如果一个类实现了Comparable接口并重写了comparaTo方法后,当使用Collection.sort(list)后,list里面的对象将按照规则进行排序,其中list指向该类的对象集合。


Comparator接口


  • 使用场景:用于集合中类型相同或不同的对象的比较,这种比较方式不同于实现Comparable接口的比较,它可以实现不同类型对象之间的比较


  • 比较规则的制定:

  • 1、给各类对象定义其比较时的大小关系的标记,用于不同对象之间的比较,常见的如在对象中写一个方法返回一个用于比较的标记,该标记可比较大小

  • 2、创建一个比较器,该比较器实现了Comparator接口,重写了compare方法


构造器实现了Comparator接口之后重写compare方法,该方法原型如下:

@Override
public int compare(Object addObj, Object oldObj) {
        /**
         * 根据你给对象设定的标记建立你的比较规则
         * 返回>0:当前对象比要比较的对象大,排序时放在该对象后
         * 返回0:当前对象比要比较的对象相等,排序时按照原来顺序,不排序
         * 返回<0:当前对象比要比较的对象小,排序时放在该对象前
         */ 
        }

如果各类都制定完一套用于比较的标记,而且通过标记设定了比较规则–即创建了比较器,当使用Collection.sort(list,比较器对象(可用匿名内部类))后,list里面的对象将按照规则进行排序,其中list指向对象集合。

你可能感兴趣的:(java基础知识总结)