源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java比较器Comparable接口与Comaprator接口的深入分析

  • 时间:2021-08-22 10:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java比较器Comparable接口与Comaprator接口的深入分析
[b]java的比较器有两类,分别是Comparable接口Comparator接口。 [/b]在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。 让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下:
[u]复制代码[/u] 代码如下:
class Student implements Comparable<Student>{     private String name;     private int age;     private float score;     public Student(String name, int age, 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 -1;//由高到底排序         else if(this.score<o.score)             return 1;         else{             if(this.age>o.age)                 return 1;//由底到高排序             else if(this.age<o.age)                 return -1;             else                 return 0;         }     } } public class ComparableDemo01 {     /**      * @param args      */     public static void main(String[] args) {         // TODO Auto-generated method stub         Student stu[]={new Student("zhangsan",20,90.0f),                 new Student("lisi",22,90.0f),                 new Student("wangwu",20,99.0f),                 new Student("sunliu",22,100.0f)};         java.util.Arrays.sort(stu);         for(Student s:stu)         {             System.out.println(s);         }     } }
[b]程序运行结果: [/b]sunliu 22 100.0 wangwu 20 99.0 zhangsan 20 90.0 lisi 22 90.0 但是在设计类的时候,往往没有考虑到让类实现Comparable接口,那么我们就需要用到另外的一个比较器接口Comparator。 从上面的实例我们可以发现,compareTo(T o)只有一个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。 代码实例:
[u]复制代码[/u] 代码如下:
package edu.sjtu.ist.comutil; import java.util.Comparator; class Student {     private String name;     private int age;     private float score;     public Student(String name, int age, float score) {         this.name = name;         this.age = age;         this.score = score;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public int getAge() {         return age;     }     public void setAge(int age) {         this.age = age;     }     public float getScore() {         return score;     }     public void setScore(float score) {         this.score = score;     }     public String toString()     {         return name+"tt"+age+"tt"+score;     } } class StudentComparator implements Comparator<Student>{     @Override     public int compare(Student o1, Student o2) {         // TODO Auto-generated method stub         if(o1.getScore()>o2.getScore())             return -1;         else if(o1.getScore()<o2.getScore())             return 1;         else{             if(o1.getAge()>o2.getAge())                 return 1;             else if(o1.getAge()<o2.getAge())                 return -1;             else                 return 0;         }     } } public class ComparableDemo02 {     /**      * @param args      */     public static void main(String[] args) {         // TODO Auto-generated method stub         Student stu[]={new Student("zhangsan",20,90.0f),                 new Student("lisi",22,90.0f),                 new Student("wangwu",20,99.0f),                 new Student("sunliu",22,100.0f)};         java.util.Arrays.sort(stu,new StudentComparator());         for(Student s:stu)         {             System.out.println(s);         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部