import java.util.Arrays;
import java.util.Comparator;
public class Code_Comparator {
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;
}
}
//Compartor<xxx>,想定义什么比较器,就在其后面加上想比较的类型
public static class IdAscendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
//返回值说明,如果返回值为负数,就认为对比的两个对象,第一个需要排在前面
//返回零,即默认相等
return o1.id - o2.id;
}
}
public static class IdDescendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o2.id - o1.id;
}
}
public static class AgeAscendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.age - o2.age;
}
}
public static class AgeDescendingComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o2.age - o1.age;
}
}
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("===========================");
}
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()默认排序的策略为内存的地址。让其用我们自定义的策略排序,传入类型是实例
//Arrays.sort()在传入对象时,如果size<60,会默认用插入算法进行排序。
//如果size>60,会默认用merge(自己定义的class数据类型)和quick(基础数据类型)(考虑稳定性)。
Arrays.sort(students, new IdAscendingComparator());
printStudents(students);
Arrays.sort(students, new IdDescendingComparator());
printStudents(students);
Arrays.sort(students, new AgeAscendingComparator());
printStudents(students);
Arrays.sort(students, new AgeDescendingComparator());
printStudents(students);
PriorityQueue<Student> queue = new PriorityQueue<>(new IdAscendingComparator() )
queue.add(student1)
queue.add(student2)
queue.add(student3)
TreeMap<Student,Interger> map = new TreeMap<>(new IdAscendingComparator() )
map.put(student1,17)
map.put(student2,6)
map.put(student3,5)
}
}