compare()与compareTo()

compareTo()

  • 是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable接口的,必须重写public int compare()方法

  • 该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较,compareTO底层是compare()方法

  • 强行将实现它的每一个类的对象进行整体排序(称为该类的自然排序),实现此接口的对象列表和数组可以用Collections.sort(),和Arrays.sort()进行自动排序

      例如arrayList排序时 
      Collections.sort(list) 会自动调用User实现的Comparable的compareTo()方法
      	
      Comparator comparator = new Comparator() { 
      @Override 
      public int compare(User user0, User user1) { 
      return user0.id.compareTo(user1.id); 
      } 
      }; 
      Collections.sort(list, comparator)//也可以重新实现排序的方法
    

使用

public int compareTo( NumberSubClass referenceName )
  • 参数
    referenceName – 可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数。
  • 返回值
    如果指定的数与参数相等返回0。
    如果指定的数小于参数返回 -1。
    如果指定的数大于参数返回 1。

compare()

  • compare(Object o1,Object o2)方法是java.util.Comparator接口的方法

  • 它则是针对本身没有比较能力的对象(数组)为它们实现比较的功能,所以它叫做比较器,是一个外部的东西,通过它定义比较的方式,再传到Collection.sort()和Arrays.sort()中对目标排序,而且通过自身的方法compare()定义比较的内容和结果的升降序

  • Comparator接口的重写,这个接口就一个抽象函数,给出的参数与返回值都是定死的

      Collections.sort(studentArr, new Comparator<Object>() {
      			public int compare(Object o1, Object o2) {
      				//你首先设置你要比较的东西
      				//具体是把参数中的Object强制转换成你要比较的东西,这里是两个Student类
      				//这里的s1,s2与上面的s1,s2一点关系都没有,只是抽象的前者与后者的关系
      				Student s1 = (Student) o1;
      				Student s2 = (Student) o2;
      				//如果前者的学号大于后者的学号,就是前者大于后者,返回1系统就会识别是前者大于后者
      				if (s1.s_no > s2.s_no) {
      					return 1;
      				}
      				//小于同理
      				if (s1.s_no < s2.s_no) {
      					return -1;
      				}
      				//如果返回0则认为前者与后者相等
      				return 0;
    

Collections.sort()重写

对于集合中使用的自定义类型,进行排序时需要自定义比较器

匿名内部类重写

Collections.sort(voList, new Comparator<Subnet>() {
                    @Override
                    public int compare(Subnet o1, Subnet o2) {
                        return o1.getName().compareTo(o2.getName());
                    }
                });

Lambda重写

Collections.sort(voList, (o1, o2) -> o1.getName().compareTo(o2.getName()));

版权声明:本文为weixin_44417042原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。