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對象則有影響。
具體有什么影響呢?夜深了,下次再慢慢寫吧。