• Comparator和Comparable


    1.区别

    1.Comparator
    在这里插入图片描述
    Comparable
    在这里插入图片描述

    2.用代码实现Comparable

    在student类当中实现Comparable接口,重写compareTo方法,在compareTo方法中写具体按照什么进行比较。
    在TestComparable类当的main方法中,利用student去调用Student 类当中的compareTo方法.

    //Student类
    public class Student implements Comparable<Student>{
        private String name;
        private int age;
        private int score;
    
        public Student(String name, int age, int score) {
            this.name = name;
            this.age = age;
            this.score = score;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", score=" + score +
                    '}';
        }
    
        @Override
        public int compareTo(Student o) {
            return this.age-o.age;
        }
    }
    //调用compareTo方法
    public class TestComparable {
    
        public static void main(String[] args) {
            Student student1=new Student("lihua",12,88);
            Student student2=new Student("xiaoxiao",13,76);
            Student student3=new Student("mary",11,99);
            int ret=student1.compareTo(student2);
            if(ret>0){
                System.out.println("student1年龄大");
            }else if(ret<0){
                System.out.println("student2年龄大");
            }else {
                System.out.println("年龄一样");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    在实现类当中实现接口,缺点是:如果更改比较对象,就需要在实现类当中的compareTo方法中更改比较对象。如果实现comparator方法,若要更改比较对象,只需要多增加一个比较器就可以了。
    在这里插入图片描述
    结果展示:
    在这里插入图片描述

    3.用代码实现Comparator

    定义一个Person类,里面封装这姓名、年龄、分数等信息;
    在AgeComparator(年龄比较器)类当中,实现Comparator接口,重写compare方法,在compare方法当中进行年龄的比较
    在TestComparator类当中,
    第一种比较的方式:直接创建两个对象,然后调用ageComparator类当中的compare方法,将两个对象传参进去就好了。 在下面这个代码中,这个方法一次只能比较两个对象。
    第二种比较的方式:创建一个数组,在数组中创建多个person对象,然后new AgeComparator(),然后利用Arrays.sort(person,ageComparator),完成对于数组多个对象根据年龄进行排序。在下面这个代码中,这个方法一次就可以比较多个对象。

    //person类
    public class Person {
        private String name;
        private int age;
        private int score;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getScore() {
            return score;
        }
    
        public void setScore(int score) {
            this.score = score;
        }
    
        public Person(String name, int age, int score) {
            this.name = name;
            this.age = age;
            this.score = score;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", score=" + score +
                    '}';
        }
    }
    //年龄比较器
    import excise.user.Person;
    
    import java.util.Comparator;
    
    public class AgeComparator implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge()-o2.getAge();
        }
    }
    //调用比较器
    import excise.comparator.AgeComparator;
    import excise.user.Person;
    import java.util.Arrays;
    public class TestComparator {
        public static void main(String[] args) {
            Person[] person=new Person[3];
            person[0]=new Person("lihua",12,88);
            person[1]=new Person("xiaoxiao",13,76);
            person[2]=new Person("mary",11,99);
            AgeComparator ageComparator=new AgeComparator();
            Arrays.sort(person,ageComparator);
            System.out.println(Arrays.toString(person));
        }
        public static void main1(String[] args) {
            Person person1=new Person("lihua",12,88);
            Person person2=new Person("xiaoxiao",13,76);
            Person person3=new Person("mary",11,99);
            AgeComparator ageComparator=new AgeComparator();
    System.out.println(ageComparator.compare(person1,person2));
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    在这里插入图片描述
    结果展示:
    在这里插入图片描述

    4.简单分析

    实现Comparable接口,重写compareTo方法,只有一个参数,所以,需要在具体的实现类当中实现这个接口。
    实现Comparator接口,重写compare方法,有两个参数,所以,当需要按照不同需求进行比较的时候,就可以写不同的比较器。

  • 相关阅读:
    vue单页面怎么做SEO优化
    【kubernetes篇】使用Harbor仓库管理kubernetes镜像
    【Python脚本进阶】2.1、端口扫描器(下):NMAP端口扫描
    JAVA多线程信号量Semaphore
    06 Job/CronJob: 为什么不直接用Pod来处理业务?
    java 字符串练习(罗马数字的转换)
    Python数据可视化-----生成数据二
    Linux ARMv8 异常向量表
    YOLO改进系列之注意力机制(EffectiveSE模型介绍)
    【LVGL事件(Events)】事件在不同组件上的应用(一)
  • 原文地址:https://blog.csdn.net/weixin_51062428/article/details/126035009