zoukankan      html  css  js  c++  java
  • java比较器Comparable接口和Comaprator接口

     Comparable故名思意是比较,意思就是做比较的,然后进行排序。

    1.什么是comparable接口

    此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) e1.equals((Object)e2) 具有相同的布尔值时,类 的自然排序才叫做与 equals 一致 。

    2.上代码自己看

     1 public class Student implements Comparable<Student>{
     2 
     3     
     4     private int no;
     5     
     6     private String name;
     7 
     8     public int getNo() {
     9         return no;
    10     }
    11 
    12     public void setNo(int no) {
    13         this.no = no;
    14     }
    15 
    16     public String getName() {
    17         return name;
    18     }
    19 
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23 
    24     @Override
    25     public int compareTo(Student s) {
    26         if(no>s.getNo()){//你需要进行比较的业务代码
    27             return 1;
    28         }
    29         return -1;
    30     }
    31     
    32 }
        public static void main(String[] args) {
            Student a=new Student();
            a.setNo(4);
            a.setName("张山1");
            
            Student a1=new Student();
            a1.setNo(2);
            a1.setName("张山2");
            
            List<Student> list=new ArrayList<>();
            list.add(a);
            list.add(a1);
        
            Collections.sort(list);
            
            list.stream().forEach(s->{
                
                System.out.println(s.getNo()+s.getName());
            });
        }

    运行结果:张山2排前,也就是我们想要的结果.

    3.Comaprator接口与comparable接口类似

    同效果例子如下:

     1 public class Student {
     2 
     3     
     4     private int no;
     5     
     6     private String name;
     7 
     8     public int getNo() {
     9         return no;
    10     }
    11 
    12     public void setNo(int no) {
    13         this.no = no;
    14     }
    15 
    16     public String getName() {
    17         return name;
    18     }
    19 
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     
    24     
    25 }
     1 public class StudentCompare implements Comparator<Student>{
     2 
     3     @Override
     4     public int compare(Student o1, Student o2) {//这里跟compareTo方法不同之处就是传了两个参数
     5         if(o1.getNo()>o2.getNo()){
     6             return 1;
     7         }
     8         return -1;
     9     }
    10 
    11 }
     1 public static void main(String[] args) {
     2         Student a=new Student();
     3         a.setNo(4);
     4         a.setName("张山1");
     5         
     6         Student a1=new Student();
     7         a1.setNo(2);
     8         a1.setName("张山2");
     9         
    10         List<Student> list=new ArrayList<>();
    11         list.add(a);
    12         list.add(a1);
    13     
    14         Collections.sort(list,new StudentCompare());
    15         
    16         list.stream().forEach(s->{
    17             
    18             System.out.println(s.getNo()+s.getName());
    19         });
    20     }

    最后运行结果跟第一个运行结果一样....

    java比较器Comparable接口和Comaprator接口运用场景就是对数据库查询出来一些特殊需要的展现数据进行排序功能。

    对数组,集合数据排序等...一切都是为操作数据而已.....

  • 相关阅读:
    DevExpress 控件使用之GridControl基本属性设置
    GridControl基础设置(一)
    GitHub Top 100 简介
    Swift3.0 单例模式实现的几种方法-Dispatch_Once
    获取cell数组
    Xcode Apple Mach-O Linker Error Group错误
    Xcode运行设备由iphone/ipad变为my mac的解决方
    iOS 修改图片颜色
    iOS——UIActivityIndicatorView活动指示器
    iOS 消息处理之performSelector
  • 原文地址:https://www.cnblogs.com/huzi007/p/5384721.html
Copyright © 2011-2022 走看看