代码探究Comparable<T> 与 Comparator比较器

Student类实现了Comparable接口,重写compareTo方法;
Student1类通过Comparator比较器实现排序;具体分析见下面代码及运行结果。

package com.company.base;
public class Student implements Comparable<Student>{
    private String name;
    private int age;
    private float score;
    public Student(String name,int age,float score){
        this.name = name;
        this.age = age;
        this.score = score;
    }
    /** 实现了Comparable接口的类要重写compareTo(T o)方法
     * 排序由-1,0,1及 被比较的两个参数的顺序有关系
     * -1 的话,交换位置
     * 0 1 不变
     */

    @Override
    public int compareTo(Student o) {
        System.out.println(this.name+"  Comparable "+o.name);
        //A B比较的话 this指的是B,o指的是A,B的score>A的score的话,返回-1交换位置,也就是说降序
       if (this.score > o.score){
           return -1;
       }else if (this.score < o.score){
           return 1;
       }else {
           //如果A B分数相等,那么如果B的age > A的age的话,0/1的话不交换位置,那么就是说升序
           if (this.age > o.age){
               return 1;
           }else if (this.age < o.age){
               return -1;
           }else {
               return 0;
           }
       }
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
//省略get 和set方法
    ...
}
package com.company.base;
public class Student1 {
    private String name;
    private int age;
    private float score;
    public Student1(String name,int age,float score){
        this.name = name;
        this.age = age;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
//省略get 和set方法
    ...
}
package com.company.base;

import java.util.*;
public class ComparableAndComparatorLearning {
    public static void main(String[] args) {
        Student student = new Student("A",19,99);
        Student student1 = new Student("B",20,99);
        Student student2 = new Student("C",19,100);
        Student student3 = new Student("D",19,98);
        Student[] students = {student,student1,student2,student3};
        System.out.println("======排序前=====");
        for (Student s:
                students) {
            System.out.println(s.toString());
        }
        System.out.println("==========Comparable实现排序===============");
        Arrays.sort(students);
        for (Student s:
             students) {
            System.out.println(s.toString());
        }

        System.out.println("============Comparator实现排序=============");
        Student1 student01 = new Student1("A",18,99);
        Student1 student11 = new Student1("B",20,99);
        Student1 student21 = new Student1("C",21,100);
        Student1 student31 = new Student1("D",17,98);
        Student1[] students1 = {student01,student11,student21,student31};
        Arrays.sort(students1, new Comparator<Student1>() {
            //A B 这样的顺序的话,o1是这里的B,o2是这里的A,o1.getAge() - o2.getAge()>0 不交换A B的位置,那么升序
            @Override
            public int compare(Student1 o1, Student1 o2) {
                System.out.println(o1.getName()+"==Comparator=="+o2.getName());
                return o1.getAge() - o2.getAge();
            }
        });
        for (Student1 s1:
             students1) {
            System.out.println(s1.toString());
        }
    }
}

运行结果

	======排序前=====
      Student{name='A', age=19, score=99.0}
      Student{name='B', age=20, score=99.0}
      Student{name='C', age=19, score=100.0}
      Student{name='D', age=19, score=98.0}
     ==========Comparable实现排序===============
      B  Comparable A
      C  Comparable B
      C  Comparable B
      C  Comparable A
      D  Comparable A
      D  Comparable B
     Student{name='C', age=19, score=100.0}
     Student{name='A', age=19, score=99.0}
     Student{name='B', age=20, score=99.0}
     Student{name='D', age=19, score=98.0}
     ============Comparator实现排序=============
     B==Comparator==A
     C==Comparator==B
     D==Comparator==C
     D==Comparator==B
     D==Comparator==A
     Student1{name='D', age=17, score=98.0}
     Student1{name='A', age=18, score=99.0}
     Student1{name='B', age=20, score=99.0}
     Student1{name='C', age=21, score=100.0}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值