了解了并总结了一下该知识盲区,在今后的开发工作中遇到合适的场景刚好能用得上
(1)先看Comparable接口
官方文档:
https://tool.oschina.net/apidocs/apidoc?api=jdk-zh
简单点说,就是通过实现该接口,使类具有“自然排序”的功能,先拿简单的类型Integer和String做实验
可以看到strArray和intArray都是两组乱序的数组,在调用Arrays.sort之后,再打印输出,就变成了有序的了。根据这个sort方法点击进入:
有一个countRunAndMakeAscending方法,我们定义的Object[ ] a数组传进来后,就是在这里一个个遍历并且进行比较排序,其中调用的正是Comparable接口的compareTo方法。而这个Comparable接口,是由对应的Object类来实现的。
关于Comparable接口的部分说明如下:
小于返回负整数,相等返回零,大于则返回正整数,以返回的数值来决定两个元素的先后次序关系,实现该接口,就重写compareTo方法,实现不同类的不同比较逻辑
(1)先看String实现的compareTo方法的比较逻辑是什么:
先是比较两串String的长度,如果长度不一致,返回差值,如果长度一致,则逐个比较字符,字符不一致,就返回这两个字符的Ascii码差值。例如:
Aa 与 Ae 做compareTo,长度一致,开始逐个字符比较,A一致,a e 不一致,则返回101(e)-97(a),证明Aa小于Ae,这样就能把String[ ]完成自然排序了
(2)接下来看Integer的
Integer的比较逻辑就简单多了,因为都是整型,直接比较即可
(3)实际应用
了解完它基本原理,接下来假设一个小需求:第一优先录取年龄最小的学生,年龄相同情况下录取成功高的学生
思路分析:有一个List,里面装满了Demo类,Demo类有三个参数,姓名,年龄,成绩,需求就是先按照年龄从小到大进行排序,年龄相同的话再按照从大到小成绩进行排序
public class Demo {
private String name;
private int age;
private double score;
// 带参构造方法
public Demo(String</