62,612
社区成员
发帖
与我相关
我的任务
分享
Person a,b; // Person类实现了Comparable接口
int result = a.compareTo(b); // 此时this指a, o指b
2. 为什么是Sort升序呢?
1. Collections.sort()源码写死的升序排序,自己的代码想要降序只能在比较规则上动手,逻辑上降序。
2. Collections.sort()调用的是Arrays.sort(),
Arrays.sort()调用的是LegacyMergeSort()或者TimSort.sort()
1. LegacyMergeSort()调用的mergeSort()方法
2. TimSort.sort()调用的 binarySort()方法
compareTo方法在内部转成Comparator,当作参数传给最终干活的mergeSort()、binarySort()等,他们通过if语句(返回值<0)判断两个对象的大小关系,默认用的升序
3. 想降序的话,只能修改比较规则 比如o.getAge()-this.getAge()。比如你说 1 和 2 比较是通过 2-1=1,那么它就傻傻地认为 2 - 1 >1,所以1 > 2,这时机器认为“2”小于“1”的,再升序sort,效果就是 “2”“1”了。
4. 你自己使用IDEA环境 随便打一个 Collections.sort() 鼠标选中 ctrl+B查看源码,一点一点找最终苦逼干活的那个函数。
Good luck.