美文网首页
Comparable和Comparator的区别

Comparable和Comparator的区别

作者: 糯米团子123 | 来源:发表于2022-07-11 14:52 被阅读0次
    1. Comparable和Comparator都是接口,都可以用来实现集合中元素的比较和排序。
    2. Comparable接口位于java.lang包下,Comparator接口位于java.util包下
    3. Comparable接口可以认为是一个内部排序器,将比较代码嵌入自身类中,重写compareTo()方法。
    class MyComparable implements Comparable<MyComparable> {
        private String name;
        private int age;
        private boolean sex;
    
        public MyComparable() {
        }
    
        public MyComparable(String name, int age, boolean sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
    
        /**
         * 重写compareTo方法,实现年龄升序,年龄相同则姓名升序
         **/
        @Override
        public int compareTo(MyComparable comparable) {
            if (this.age == comparable.age){
                return this.name.compareTo(comparable.name);
            }
            return this.age - comparable.age;
            // 比较者大于被比较者,返回正整数
            // 比较者等于被比较者,那么返回0
            // 比较者小于被比较者,那么返回负整数
        }
    
    }
    
    // 使用
    Collections.sort(list);
    
    1. Comparator是一个外部比较器,有两种方式使用
      4.1 在类内部实现Comparator接口,重写compare()方法
      4.2 在外部使用Comparator比较
    // 方式1 在类内部实现Comparator接口,重写compare()方法
    class MyComparator implements Comparator<MyComparator> {
        private String name;
        private int age;
        private boolean sex;
    
        public MyComparator() {
        }
    
        public MyComparator(String name, int age, boolean sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        /**
         * 按年龄排序
         * @param o1
         * @param o2
         * @return
         */
        @Override
        public int compare(MyComparator o1, MyComparator o2) {
            return o1.age - o2.age;
        }
    // o1大于o2,返回正整数
    // o1等于o2,返回0
    // o1小于o3,返回负整数
    }
    // 使用
    Collections.sort(list);
    
    // 方式2 在外部使用Comparator比较
    //按名字升序排序
    Collections.sort(list, new Comparator<MyComparator>() {
      @Override
      public int compare(MyComparator o1, MyComparator o2) {
        return o1.getName().compareTo(o2.getName()); //按照名字升序
      }
    });
    //Comparator接口是一个函数式接口,根据jdk1.8新特性,我们采用Lambda表达式简化代码
    Collections.sort(list,(u1,u2)->{
      return u1.getName().compareTo(u2.getName());
    });
    

    相关文章

      网友评论

          本文标题:Comparable和Comparator的区别

          本文链接:https://www.haomeiwen.com/subject/akjnbrtx.html