Arrays.sort()及自定义比较器
-
比较器的实质是重载比较运算符
-
比较器可以很好的应用在特殊标准的排序上
-
比较器可以很好的应用在根据特殊标准排序的结构上
-
在自定义比较器,重写compare方法时,return正值,返回后一个元素;return负值,返回前一个元素;return 0,两个元素顺序不变。
public class Example{
public static class Student{
int classNo;
int age;
public Student(int classNo,int age){
this.classNo = classNo;
this.age = age;
}
}
public static class IdAscendingComparator implements Comparator<Student>{
public int compare(Student o1,Student o2){
if(o1.classNo == o2.classNo) return o1.age-o2.age;
return o1.classNo - o2.classNo;
}
}
public static void main(String[] args){
Student s1 = new Student(1,17);
Student s2 = new Student(2,25);
Student s3 = new Student(1,20);
Student s4 = new Student(2,24);
Student s5 = new Student(3,32);
Student[] arr = {s1,s2,s3,s4,s5};
System.out.println("=====按clasNo从小到大排序=====");
Arrays.sort(arr,(a,b)->a.classNo-b.classNo);
System.out.println("====按clasNo从小到大排序,classNo相同,按age从小到大====");
Arrays.sort(arr,(a,b)->a.classNo != b.classNo ? a.classNo-b.classNo:a.age-b.age);
//内部类方式
Arrays.sort(arr,new Comparator<Student>(){
public int compare(Student o1,Student o2){
if(o1.classNo == o2.classNo) return o1.age-o2.age;
return o1.classNo - o2.classNo;
}
});
//建一个比较器类方式
Arrays.sort(arr,new IdAscendingComparator());
}
}
- 注意:Arrays.sort()仅支持对引用数据类型进行自定义排序。如果是基本数据类型(如int),将无法使用Comparator进行自定义排序