实现比较器的方法有两种:
- 实现Comparable,在比试中用的比较少。
- 人为的定义对类的比较,去实现comparator接口;
我们定义一个学生类,定义他的name,id,age属性,通过id和age对他进行排序,这时我们用比较器对其进行排序;前面元素减去后面元素如果为负数,则前面小排在前面。反之,则大的排在前面,为降序。
public class Code_11_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;
}
}
public static class IdAscendingComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
//以id进行升序排序
return o1.id-o2.id;
}
}
public static class IdDescendingComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
//以id进行降序排序
return o2.id-o1.id;
}
}
public static class AgeAscendingComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
//以age进行升序排序
return o1.age-o2.age;
}
}
public static class AgeDescendingComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
//以age进行降序排序
return o2.age-o1.age;
}
}
public static void print(Student[] students){
for (Student s:students) {
System.out.println("Name:"+s.name+" Id:"+s.id+" Age:"+s.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[]{student1,student2,student3};
Arrays.sort(students,new IdAscendingComparator());
print(students);
Arrays.sort(students,new IdDescendingComparator());
print(students);
Arrays.sort(students,new AgeAscendingComparator());
print(students);
Arrays.sort(students,new AgeDescendingComparator());
print(students);
//优先级队列(小顶堆。 IdAscendingComparator()是从小到大排序)
PriorityQueue<Student> heap=new PriorityQueue<>(new IdAscendingComparator());
heap.add(student1);
heap.add(student2);
heap.add(student3);
while(!heap.isEmpty()){
//每次推出堆顶输出
Student student=heap.poll();
System.out.println("Name:"+student.name+" Id:"+student.id+" Age:"+student.age);
}
//红黑树
System.out.println("红黑树========");
TreeSet<Student> treeSet=new TreeSet<>(new IdDescendingComparator());
treeSet.add(student1);
treeSet.add(student2);
treeSet.add(student3);
while (!treeSet.isEmpty()){
Student student=treeSet.pollFirst();
System.out.println("Name:"+student.name+" Id:"+student.id+" Age:"+student.age);
}
}
}