CClown

Java中自然排序Comparable与比较强排序Comparator的使用笔记

作者:cece 时间:2020-12-10 浏览量(52)

Comparable是一个排序接口,在自己定义的类中如果继承了Comparable接口,就说明该类支持排序,实现了Comparable接口的类的对象的列表或数组可通过Collections.sort或Arrays.sort进行自动排序。一个类中实现了Comparable接口,需要重写compareTo()方法

@Override
public int compareTo(Student o) {
    return 0;
}

这里看到重写方法中返回的是0,说明只存一个元素,再看一段代码:

@Override
public int compareTo(Student s) {
    int num=this.age-s.age;
    return num==0?this.name.compareTo(s.name):num;
}

上面这段代码是比较两个学生对象如果年龄相等的情况下,使用名字字母的先后顺序进行排序。

也就说如果两个元素相等的话,返回0,正序排序返回1,倒序排序返回-1.

 

 

Comparator是比较接口,当我们需要控制本身不支持排序的类的次序时,就用使用Comparator接口了,也就是说,我们可以通过Comparator来新建一个比较器,然后通过这个比较器对该类进行排序。

TreeSet<Student> t=new TreeSet<>(new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        int num=o1.getAge()-o2.getAge();
        return num==0?o1.getName().compareTo(o2.getName()):num;
    }
});

这里呢,我们是通过TreeSet来存储对象元素并排序的,重点看new Comparator的这段代码

在这段代码中,我们需要重写compare(TO1,TO2)方法,方法呢,和Comparable接口重写方法是一样的

也是返回0是相等,1是正序,-1是倒序。

 

这里一定要注意,重写方法时,一定要按照主要条件和次要条件来写。


文章标签:java

本文选自CClown的原创文章,转载请注明内容来源:CClown(https://blog.cclown.com/post/42.html)

评论:

验证码