当前位置: 代码迷 >> 综合 >> Comparator,Comparable的desc和asc
  详细解决方案

Comparator,Comparable的desc和asc

热度:11   发布时间:2023-12-05 02:31:28.0

相信大家刚开始学习Java的时候对比较器很头疼,到底什么时候是升序,什么时候是降序呢??

接下来用简短的话语最快的告诉大家:

第一组:Comparator

class AgeComparator implements Comparator<Student> {
    @Overridepublic int compare (Student o1, Student o2) {
    return o1.age - o2.age;}
}

第二组:Comparable

class Student implements Comparable<Student> {
    public String name;public int age;public int score;//其他乱起八糟的省略不写了@Overridepublic int compareTo(Student o) {
    if(this.age > o.age) {
    return 1;} else if(this.age == o.age) {
    return 0;} else {
    return -1;}}
}

统一一下,对于Comparator来说,Student o1是第一个参数,代表放在前面,o2是第二个参数代表放在后面。

? 对于Comparable来说,this是第一个参数,代表放在前面,o是第二个参数代表放在后面。

关系统一好了之后我们现在来看:

如果返回值大于0,那么说明要进行交换

如果返回值等于0,我们不考虑,因为换不换没有区别,两个值相等

如果返回值小于0,那么说明不进行交换

先看第一组Comparator:

如果返回值是正数,那么说明o1.age > o2.age。返回值为正数,需要交换,o1是第一个位置,o2是第二个位置,且o1.age > o2.age,因此可以发现,小的被换到前面去了,是升序

如果返回值是负数,那么说明o1.age < o2.age。反沪指为负数,不需要交换,所以小的在前面,是升序,与前面是完全符合的。

因此这么搞可以得到升序。

同理,再看第二组Comparable:

如果返回值是正数,那么说明this.age > o.age,需要交换,小的被换到前面去了,是升序。其他的判断方法和第一组完全一样。

  相关解决方案