compare排序原理

  public int compareTo(Student o) {

        return this.age - o.age; // 比较年龄(年龄的升序)
  }

为什么return this.age-o.age是升序?  困扰很久的痛点,终于想明白,想明白就很好理解跟记忆了,还是要多学习鸭!

第一步:首先要知道 Collections.sort()方法进行排序的时候,sort里面默认是升序排序。这里一定要记住了。

第二步:  compare函数的返回值-1、1、0是什么个意思? 

返回值为-1, 表示左边的数比右边的数小,左右的数不进行交换。

返回值为0, 表示左边的数等于右边的数,左右的数不进行交换。

返回值为1, 表示左边的数比右边的数大,左右的数进行交换。(不进行交换的话,就没办法维持升序)

上面的例子中this.age可以理解成左边的数,o.age可以理解成右边的数。

this.age-o.age>0 说明左边的数比右边的数大,return this.age-o.age 返回的是一个正数,就进行左右交换,所以最终输出是升序。

this.age-o.age<0 说明左边的数比右边的数小,return this.age-o.age 返回的是一个负数,不用进行交换,所以最终输出是升序。

可以看看下面这个实例,就更加清晰了。

https://bbs.csdn.net/topics/390951144?page=1

进阶:那这里返回值等于0,难道不是完全没用了?虽然对两个数字而言交换顺序没有影响,但是如果是map对象则有影响。

具体有什么影响呢?夜深了,下次再慢慢写吧。

原文地址:https://www.cnblogs.com/ow0843/p/10631733.html