Java 数组中存储的是对象,如何排序?

51 阅读1分钟

方式一:让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则

// 实体类
public class Student implements Comparable<Student>{
    private String name;
    private char sex;
    private double score;

    public Student() {
    }

    @Override
    public int compareTo(Student o) {
        // 升序 正整数
        // 降序 负整数
        // ==   0
        if(this.score - o.getScore() > 0) {
            return 1;
        }else if(this.score - o.getScore() < 0){
            return -1;
        }
        return 0;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", sex=" + sex +
                ", score=" + score +
                '}';
    }

    public Student(String name, char sex, double score) {
        this.name = name;
        this.sex = sex;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}
// main
public static void main(String[] args) {
    Student[] students = new Student[3];
    students[0] = new Student("李子彬1",'男',100);
    students[1] = new Student("李子彬2",'男',66);
    students[2] = new Student("李子彬3",'男',88.2);
    Arrays.sort(students);
    System.out.println(Arrays.toString(students));
}

方式二:使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后制定比较规则

public static void main(String[] args) {
    Student[] students = new Student[3];
    students[0] = new Student("李子彬1",'男',100);
    students[1] = new Student("李子彬2",'男',66);
    students[2] = new Student("李子彬3",'男',88.2);
    Arrays.sort(students, new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            return Double.compare(o2.getScore(),o1.getScore());
        }
    });
    System.out.println(Arrays.toString(students));
}