Compare接口与Comparator接口区别与理解

一、实现Compare接口与Comparator接口的类,都是为了对象实例数组排序的方便,因为可以直接调用

 java.util.Arrays.sort(对象数组名称),可以自定义排序规则。

不同之处:

 1 排序规则实现的方法不同

    Comparable接口的方法:compareTo(Object o)

    Comparator接口的方法:compare(T o1, To2)

 2 类设计前后不同

      Comparable接口用于在类的设计中使用;

   Comparator接口用于类设计已经完成,还想排序(Arrays);

二、Comparable接口的实例操作

 Student类创建时实现Comparable接口,覆写compareTo()方法,

成绩按从高到低排序,成绩相等按年龄从小到大排序。

复制代码

package ch11.lei.ji;
/*实现Comparator接口的类可以方便的排序,
 * 覆写compareTo接口
 * java.util.Arrays.sort(对象类数组),*/
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 + "\t\t" + this.age + "\t\t" + this.score ;
    }
    public int compareTo(Student stu){    // 覆写compareTo()方法,实现排序规则的应用
        if(this.score>stu.score){
            return -1 ;
        }else if(this.scorestu.age){
                return 1 ;
            }else if(this.age 
  

复制代码

三、Comparator接口实例操作

Student01类原先没有比较器,类完成后构建一个比较器StudentComparator类

按年龄从大到小排序。

复制代码

package ch11.lei.ji;
import java.util.* ;
 class Student01{    // 指定类型为Student
    private String name ;
    private int age ;
    public Student01(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public boolean equals(Object obj){    // 覆写equals方法
        if(this==obj){
            return true ;
        }
        if(!(obj instanceof Student)){
            return false ;
        }
        Student01 stu = (Student01) obj ;
        if(stu.name.equals(this.name)&&stu.age==this.age){
            return true ;
        }else{
            return false ;
        }
    }
    public void setName(String name){
        this.name = name ;
    }
    public void setAge(int age){
        this.age = age ;
    }
    public String getName(){
        return this.name ;
    }
    public int getAge(){
        return this.age ;
    }
    public String toString(){
        return name + "\t\t" + this.age  ;
    }
};

class StudentComparator implements Comparator{    // 实现比较器
    // 因为Object类中本身已经有了equals()方法
    public int compare(Student01 s1,Student01 s2){
        if(s1.equals(s2)){
            return 0 ;
        }else if(s1.getAge() 
 

你可能感兴趣的:(Compare接口与Comparator接口区别与理解)