比较器Comparator用途:当面试算法时,前面的排序不是考察重点时,直接用JDK封装的排序算法。
Arrays.sort(对象数组,new 自定义的比较器()) ;
/**
* @Description: 自定义比较器及其使用方式
* @author: harold
* @date: 2021年11月09日 19:12
*/
public class CustomComparator {
public static class Student {
public String name;
public int id;
public int age;
public Student(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
}
/**
* 自定义比较器的使用方式
* @param args
*/
public static void main(String[] args) {
Student student1 = new Student("A", 1, 23);
Student student2 = new Student("B", 2, 21);
Student student3 = new Student("C", 3, 22);
Student[] students = new Student[] { student3, student2, student1 };
printStudents(students);
//数组排序
Arrays.sort(students, new IdAscendingComparator());
printStudents(students);
Arrays.sort(students, new IdDescendingComparator());
printStudents(students);
//也可以用堆排序,优先队列就是堆
PriorityQueue<Student> heap = new PriorityQueue<>(new IdDescendingComparator());
heap.add(student3);
heap.add(student1);
heap.add(student2);
while (!heap.isEmpty()) {
Student student = heap.poll();
System.out.println("Name: " + student.name + ", Id: " + student.id + ", Age: " + student.age);
}
}
/**
* 让Student对象按id从小到大排序
*/
public static class IdAscendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.id - o2.id;
}
}
/**
* 让Student对象按id从大到小排序
*/
public static class IdDescendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o2.id - o1.id;
}
}
public static void printStudents(Student[] students) {
for (Student student : students) {
System.out.println("Name : " + student.name + ", Id : " + student.id + ", Age : " + student.age);
}
System.out.println("===========================");
}
}