比较器

一、比较对象的大小,使用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)方法。

posted @ 2021-11-23 15:40  刘小呆  阅读(324)  评论(0)    收藏  举报