博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
compare排序原理
阅读量:5311 次
发布时间:2019-06-14

本文共 701 字,大约阅读时间需要 2 分钟。

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 返回的是一个负数,不用进行交换,所以最终输出是升序。

 

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

 

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

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

 

转载于:https://www.cnblogs.com/ow0843/p/10631733.html

你可能感兴趣的文章
Magicodes.Admin.Core开源框架总体介绍
查看>>
python面向对象基础
查看>>
vim编辑器的基本用法
查看>>
利用文本编辑器输入Hello.java,并在JDK环境下编译和运行。请将程序编译、运行的结果...
查看>>
HDU3870- intervals(差分约束)
查看>>
斯坦福机器学习实现与分析之二(线性回归)
查看>>
【bzoj3282】Tree LCT
查看>>
边工作边刷题:70天一遍leetcode: day 62-1
查看>>
centos中YUM安装后文件的常见路径
查看>>
链路聚合的优点
查看>>
gdb core调试
查看>>
Centos7下安装与卸载Jdk1.8
查看>>
POJ1328Radar Installation贪心+模拟队列+结构体排序+运算符重载+构造函数
查看>>
EOF:getchar()函数返回的一个特殊值
查看>>
ms-sql 转换成带千分位,并保留两位小数
查看>>
自动装箱、自动拆箱
查看>>
BZOJ3171: [Tjoi2013]循环格
查看>>
百度地图
查看>>
java的第3次作业
查看>>
移动平均
查看>>