java_Comparator接口

如果一个类已经开发完成,但是在此类建立的初期并没有实现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}

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

发布了22 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_19408473/article/details/72921357
今日推荐