上篇文章我们学习了通过重写compareTo()方法给对象数组排序(链接:http://t.csdn.cn/i5GfS)可是这种方法也有缺点,就是不太灵活,太固定了。如果我们学生类不实现comparable接口能不能做到非常灵活的实现排序呢?我们还有另一种方法:比较器
我们定义另一个类实现另一个接口,然后实现里面的抽象方法。
然后我们可以看到 Arrays.sort()源码中有这样一个方法:
这个方法可以传两个参数。又因为我们的AgeComparator实现了 Comparator接口,那我们就可以这样写一个比较器作为第二个参数:
这样我们就可以完成对年龄的排序:
我们会发现现在是单独的一个类,不会对Student类进行修改 。
同样我们可以再实现几个,比如成绩的比较器:
这样就是实现了对成绩排序。
本篇完整代码:
package csdn; import java.util.Arrays; import java.util.Comparator; class Student { public String name; public int age; public 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 + '}'; } } class AgeComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.age-o2.age; } } class ScoreComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.score-o2.score; } } public class test { public static void main(String[] args) { Student[] students=new Student[4]; students[0]=new Student("zhangsan",10,19); students[1]=new Student("lisi",8,78); students[2]=new Student("wangwu",15,57); students[3]=new Student("zhaoliu",11,57); AgeComparator ageComparator=new AgeComparator(); //比较器 Arrays.sort(students,ageComparator);//按年龄排 ScoreComparator scoreComparator=new ScoreComparator(); //比较器 Arrays.sort(students,scoreComparator);//按成绩排 } }