比较器
一、比较对象的大小,使用Comparable或Comparator
二、Comparable接口的使用(自然排序)
- 像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小方法
- 像String、包装类重写compareTo()以后,进行了从小到大的排序
- 重写compareTo()方法的规则
- 如果当前对象this大于形参对象obj,则返回正整数
- 如果当前对象this小于形参对象obj,则返回负数
- 如果当前对象this等于形参对象obj,则返回零
-对于自定义的类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写CompareTo()方法
方式一、
public int compareTo(Object o){
if(o instanceof Goods){
Goods good = (Good)o;
if(this.price>good.price){
return 1;
}else if(this.price<good.price){
return -1;
}else{
return 0;
}
}
throw new RuntimeException("传入的数据类型不一致");
}
方式二、
return Double.compare(this.price,good.price);
三、Comparator接口的使用(定制排序)
1、背景:元素的类型没有实现Comparable接口排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序
2、重写compare(Object o1,Object o2)方法,比较o1和o2方法:如果返回的是正整数,则o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2
四、compareTo(Object o)方法和compare(Object o1,Object 02)方法的区别和联系
-
compareTo(Object o)方法是java.lang.Comparable
接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable 接口的,必须重写public int compareTo(T o)方法,比如MapReduce中Map函数和Reduce函数处理的 <key,value>,其中需要根据key对键值对进行排序,所以,key实现了WritableComparable 接口,实现这个接口可同时用于序列化和反序列化。WritableComparable 接口(用于序列化和反序列化)是Writable接口和Comparable 接口的组合; -
compare(Object o1,Object o2)方法是java.util.Comparator
接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。

浙公网安备 33010602011771号