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指向对象集合。