- Comparable是一个接口,里面只有一个compareTo方法,参数是泛型;
- 利用compareTo方法进行对象排序,首先该对象类要实现Comparable接口,然后再根据实际排序要求来重写compareTo方法。
- 例如:有一个Student类,里面属性有姓名、年龄、成绩,按照成绩由高到低排序,如果成绩相等,再通过年龄由小到大排序,如果成绩、年龄都相等,再通过姓名进行排序。
/** * 设计一个学生类,包含姓名、年龄、成绩 */ public class Student implements Comparable<Student>{//实现Comparable接口 private String name; private int age; private double score; public Student(String name, int age, double score) { this.name = name; this.age = age; this.score = score; } @Override public int compareTo(Student student) { if (this.getScore() < student.getScore()) { return 1; }else if (this.getScore() > student.getScore()) { return -1; }else { if(this.getAge() == student.getAge()) { if(this.getName().compareTo(student.getName())==0) { return 0; }else if(this.getName().compareTo(student.getName())>0) { return 1; }else{ return -1; } }else if(this.getAge() > student.getAge()) { return 1; }else{ return -1; } } } public String toString(){ return name + " " + age + " " + score; } public int getAge() { return age; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class TestComparable { public static void main(String[] args) { Student a1 = new Student("张晓雪",20,86); Student a2 = new Student("李璐",20,83); Student a3 = new Student("韩阳",21,83); Student a4 = new Student("程清",21,83); // 上述学生进行排序,放置到一个数组里面 Student[] students = new Student[]{a1,a2,a3,a4}; Arrays.sort(students); // 排序 for (Student s : students) { System.out.println(s); } } }
执行结果:
张晓雪 20 86.0 李璐 20 83.0 程清 21 83.0 韩阳 21 83.0
利用compareTo方法进行对象排序
于 2024-05-14 16:52:01 首次发布