Java常用类----比较器(Comparable,Comparator)

Comparable接口

  Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序

  可以直接使用java.util.Array类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。

  Comparable接口定义如下:    

public interface Comparable<T>{

      public int compareTo(T o);

    }

  此方法返回一个int类型的数据,但此int的值只能是一下三种:

    1:表示大于    -1:表示小于    0:表示等于

 

要求:

  定义一个学生类,里面有姓名,年龄,成绩三个属性,要求按成绩由高到低排列,如果成绩相等,则按年龄由低到高排序:

class Student implements Comparable<Student> {    // 指定类型为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.score<stu.score){
            return 1 ;
        }else{
            if(this.age>stu.age){
                return 1 ;
            }else if(this.age<stu.age){
                return -1 ;
            }else{
                return 0 ;
            }
        }    
    }
};
public class Test{
    public static void main(String args[]){
        Student stu[] = {new Student("张三",20,90.0f),
            new Student("李四",22,90.0f),new Student("王五",20,99.0f),
            new Student("赵六",20,70.0f),new Student("孙七",22,100.0f)} ;
        java.util.Arrays.sort(stu) ;    // 进行排序操作
        for(int i=0;i<stu.length;i++){    // 循环输出数组中的内容
            System.out.println(stu[i]) ;
        }
    }
};
View Code
孙七        22        100.0
王五        20        99.0
张三        20        90.0
李四        22        90.0
赵六        20        70.0

注意:

  如果在此时Student类中没有实现Comparable接口,则在执行时会出现以下异常:

    

分析比较器的排序原理

  实际上比较器的操作,就是经常听到数据结构中的二叉树的排序算法,通过二叉树进行排序,之后利用中序遍历的方式把内容依次取出来。

  排序的基本原理:使用第一个元素作为根节点,之后如果后面的内容比根节点要小,则放在左子树,如果内容比根节点的内容要大,则放在右子树。

 

posted @ 2015-04-08 11:44  闲来垂钓  阅读(253)  评论(0)    收藏  举报