关于比较器,我们知道我们java数组中可以使用一个方法:Array.sort(array);来进行排序,如果我们数组中是放的基本数据类型,就可以直接比较大小排序,如果我们放的是对象的话,这样排序就意义不大,需要我们自己进行相应的修改,得到我们想要的比较结果。
比如我们有三个学生,学生属性有id,name,age,我们可以使用id来排序,也可以使用age来排序。两者结果是不一样的。下边我们来实现这个功能
下边会涉及到comparator接口(不懂的同学可以去查询一下comparable和comparator的区别):
package 比较器;
import java.util.Arrays;
import java.util.Comparator;
public class ComparatorTest {
public static class Student {
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
//这里是比较器1,是利用id来进行比较
public static class IdComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.id - o2.id;
}
}
//这里是比较器2,是利用age来进行比较
public static class AgeComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.age - o2.age;
}
}
public static void main(String[] args) {
Student s1 = new Student(1, "小红", 12);
Student s2 = new Student(3, "小张", 10);
Student s3 = new Student(2, "小王", 8);
Student[] sArray = { s1, s2, s3 };
Arrays.sort(sArray,new IdComparator());
for(int i=0;i<sArray.length;i++){
System.out.println(sArray[i]);
}
System.out.println("----------------------------");
Arrays.sort(sArray,new AgeComparator());
for(int i=0;i<sArray.length;i++){
System.out.println(sArray[i]);
}
}
}
控制台打印如下: