概述
实现比较器的方法有两种:
- 实现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);
}
}
}
最后
以上就是强健乌冬面为你收集整理的算法中比较器的使用的全部内容,希望文章能够帮你解决算法中比较器的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复