Collections.Sort中重写compareTo的参数代表什么意思呀?

rklhxyk1128 2019-08-25 04:37:14






上面说compareTo里面 return this.age - o.age就可以让Sort升序了 , 我没理解this还有o都分别指的什么,谁和谁比呀,咋就让Sort升序了?
...全文
290 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
朝夕在指间 2019-08-26
  • 打赏
  • 举报
回复 3
this表示当前添加的对象,o表示集合中已经存在的对象
小心鞋带 2019-08-26
  • 打赏
  • 举报
回复 2
关于this指针:https://blog.csdn.net/qq_41976288/article/details/82856816 关于Comparable接口:https://www.cnblogs.com/skywang12345/p/3324788.html 关于Collections.sort:https://www.jianshu.com/p/32f9578b9acc Comparable接口的compareTo()方法: 1. 简单的说,两个东西比较 left > right, this指左边,o指右边,大概是左边和右边比。 用法就是 根据compareTo的返回值决定中间的符号 是大于号(返回值为正数) 、等于号(返回值为0) 还是小于号(返回值为负数)。 比较1和3的大小关系, 1-2=-1 ,所以 -1<0,所以 1<2

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.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧