java_Comparator接口

来源:互联网 发布:洗衣机推荐 知乎 编辑:程序博客网 时间:2024/06/09 22:33

如果一个类已经开发完成,但是在此类建立的初期并没有实现Comparable接口,此时是无法对该类进行排序操作的。为了解决这样的问题,Java定义了另一个比较器接口comparator接口。接口定义如下:

public interface Comparator<T>{    public int compare(to1,to2);    boolean equals(Object obj);}

可以发现此类也存在一个compare方法,同样返回0 -1 1;
与之前不同的是,我们需要专门定义一个比价器规则类才能对数组进行排序。

我们来新建一个学生类,此类包含姓名和年龄两个字段,并且以年龄进行排序:

public class Student2 {    private String name;    private int  age;    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;    }    @Override    public String toString() {        return "Student2{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }    @Override    public boolean equals(Object obj) {        if(this == obj){            return true;        }        if(!(obj instanceof Student2)){            return  false;        }        Student2 stu = (Student2)obj;        if(stu.name.equals(this.getName())&& stu.age == this.age){            return true;        }else{            return  false;        }    }}

比较器规则类:

public class StudentComparator implements Comparator<Student2> {    @Override    public int compare(Student2 o1, Student2 o2) {        if(o1.equals(o2)){            return 0;        }else if(o1.getAge() <o2.getAge()){            return 1;        }else {            return -1;        }    }}

测试:

    @Test    public void test(){        Student2 stu[] = {new Student2("张三",24),                new Student2("李四",22),                new Student2("王五",19),                new Student2("赵七",20),                new Student2("孙八",43)};        Arrays.sort(stu,new StudentComparator());        for (Student2 s :stu){            System.out.println(s);        }    }

结果:

Student2{name=’孙八’, age=43}
Student2{name=’张三’, age=24}
Student2{name=’李四’, age=22}
Student2{name=’赵七’, age=20}
Student2{name=’王五’, age=19}

可以看到该对象已经按照年龄从大到小排列起来了。

原创粉丝点击