接口的使用范例 对员工信息进行排序

class Person2  {
    private String name;
    private int age;
    private double score;
    
    public Person2(String name, int age, double score) {
        super();
        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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    
    
}
    public static void main(String[] args) {
        
        Person2[] array = new Person2[3];
        array[0] = new Person2("caocao",18,29.0);
        array[1] = new Person2("liubei",98,19.0);
        array[2] = new Person2("erke",38,99.99);
        
        //想对这个数组进行排序
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));

运行结果出现异常

此时需要重写toString方法,重写时应该给这个类继承一个接口Comparable

抛源码 发现

Compareable:
* public interface Comparable<T> {
* public int compareTo(T o);
* }

需要定义依照什么属性进行排序

class Person2 implements Comparable<Person2>{
    private String name;
    private int age;
    private double score;
    
    public Person2(String name, int age, double score) {
        //super();
        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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Person2 [name=" + name + ", age=" + age + ", "
                + "score=" + score + "]";
    }
    //Person2 o待排序的数据   库  
    public int compareTo(Person2 o){
        //return age - o.age;
        //return name.compareTo(o.name);
        return (int)(score-o.score);
    }
    
}

public class TestDemo3 {

    public static void main(String[] args) {
        
        Person2[] array = new Person2[3];
        array[0] = new Person2("caocao",56,80.0);
        array[1] = new Person2("liubei",50,50.0);
        array[2] = new Person2("sunquan",38,49.49);
        //想对这个数组进行排序

Arrays.sort(array);
System.out.println(Arrays.toString(array));

但是回过头来    实际工作中我们对这个类已经做好了封装,如果想要比较下别的信息会很麻烦

此时引入第二个接口Comparator

它是一个比较器   

接口Comparator实现了一个匿名内部类,重写了compare方法

class Person2 {
    private String name;
    private int age;
    private double score;
    
    public Person2(String name, int age, double score) {
        //super();
        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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Person2 [name=" + name + ", age=" + age + ", "
                + "score=" + score + "]";
    }
public class TestDemo3 {

    public static void main(String[] args) {
        
        Person2[] array = new Person2[3];
        array[0] = new Person2("caocao",56,80.0);
        array[1] = new Person2("liubei",50,50.0);
        array[2] = new Person2("sunquan",38,49.49);
        
        
        
        //想对数组内的数据年龄进行排序
        //Comparator:比较器  类的外部
        Arrays.sort(array,new Comparator<Person2>(){
            //传入的时候由用户自己选择
            //按照用户自己的想法进行排序
            @Override
            public int compare(Person2 p1, Person2 p2) {
              
                int age1 = p1.getAge();
                int age2 = p2.getAge();
                return age1 > age2 ? age1 : (age1 == age2) ? 0:-1;
            }
            
        });
        System.out.println(Arrays.toString(array));
        /*//分数进行排序
        Arrays.sort(array,new Comparator<Person2>(){
            //传入的时候由用户自己选择
            //按照用户自己的想法进行排序
            @Override
            public int compare(Person2 p1, Person2 p2) {
         
                double score1 = p1.getScore();
                double score2 = p2.getScore();
                return (int)(score1 > score2 ? score1 : (score1 == score2) 
                        ? 0:-1);
            }
            
        });
        
        System.out.println(Arrays.toString(array));
    }
*/
}
}

 


 

posted on 2018-05-25 10:38  番茄疯了  阅读(111)  评论(0)    收藏  举报