Java比较器Comparable接口和Comaprator接口
java的比较器有两类,分别是Comparable接口和Comparator接口。 在为对象数组进行排序时,比较器的作用非常明显,首先来说解Comparable接口。 让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那末就能够直接调用java.util.Arrays.sort()来排序对象数组,实例以下: class Student implements Comparable<Student>{ private String name; private int age; float score; public Student(String name,int age,255)">float score) { this.name = name; this.age = age; this.score = score; } public String toString() { return name+"tt"+age+"tt"+score; } @Override public int compareTo(Student o) { // TODO Auto-generated method stub if(this.score>o.score)score是private的,为何能够直接调用,这是由于在Student类内部 return ⑴;由高到底排序 else this.score<o.score) return 1; else{ this.age>o.age) return 1;由底到高排序 this.age<o.age) return ⑴; else return 0; } } } class ComparableDemo01 { /** * @param args */ static void main(String[] args) { TODO Auto-generated method stub Student stu[]={new Student("zhangsan",20,90.0f),new Student("lisi",22,255)">new Student("wangwu",99.0f),255)">new Student("sunliu",100.0f)}; java.util.Arrays.sort(stu); for(Student s:stu) { System.out.println(s); } } } 程序运行结果:
sunliu 22 100.0 但是在设计类的时候,常常没有斟酌到让类实现Comparable接口,那末我们就需要用到另外的1个比较器接口Comparator。 从上面的实例我们可以发现,compareTo(T o)只有1个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。 代码实例: package edu.sjtu.ist.comutil; import java.util.Comparator; class Student { this.score = score; } public String getName() { return name; } void setName(String name) { this.name = name; } int getAge() { return age; } void setAge(int age) { this.age = age; } float getScore() { return score; } void setScore(return name+"tt"+age+"tt"+score; } } class StudentComparator implements Comparator<Student>{ @Override int compare(Student o1,Student o2) { if(o1.getScore()>o2.getScore()) return ⑴; if(o1.getScore()<o2.getScore()) if(o1.getAge()>o2.getAge()) return 1; if(o1.getAge()<o2.getAge()) else return 0; } } } class ComparableDemo02 { TODO Auto-generated method stub Student stu[]={)}; java.util.Arrays.sort(stu,255)">new StudentComparator()); for(Student s:stu) { System.out.println(s); } } } 上述程序的运行结果与代码实例11样。
学习Java的同学注意了!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |