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對象則有影響。

具體有什么影響呢?夜深了,下次再慢慢寫吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM