在最近的开发中,需要对一些数据对象按照某一规则进行排序的操作,由于对象实例一般都是存放在List、Map等集合中,自然想到使用Collections类中的sort方法来对既定集合进行排序。下面通过Person类按照年龄age属性的排序来说明Collections.sort的一般使用方法
1、基础的Person类
Person类
![](https://img.haomeiwen.com/i8032363/d5c034f451ba2323.png)
2、一般的输出
不进行排序的List集合
![](https://img.haomeiwen.com/i8032363/b126135e0650c753.png)
输出结果:
[Person [age=25, name=张三], Person [age=24, name=王五], Person [age=30, name=李四]]
结果很显然,List集合中的对象是无序对象。
3、增加Comparable接口的Person类并进行排序
使用Collections.sort()进行排序
在上述测试函数中,增加Collections.sort(personList);编译器会告知Person需要实现Comparable接口
![](https://img.haomeiwen.com/i8032363/cd0053c6a799219b.png)
为Person类实现Comparable接口,并实现Comparable接口的compareTo方法
![](https://img.haomeiwen.com/i8032363/54cfbde9b231c64b.png)
compareTo方法的返回值
![](https://img.haomeiwen.com/i8032363/cb7cc384df1f7aaa.png)
输出结果
[Person [age=24, name=王五], Person [age=25, name=张三], Person [age=30, name=李四]]
4、无法改变源文件的类如何进行排序
有些情况,在使用第三方jar包时或者给定类不希望增加接口时,如何通过进行排序?Colletions类中也提供了另外一种方式来进行排序,即通过Comparator来实现
Comparator实现
![](https://img.haomeiwen.com/i8032363/f7f8aca60403498f.png)
输出结果
[Person [age=24, name=王五], Person [age=25, name=张三], Person [age=30, name=李四]]
5、comparator 以及 comparable的区别
comparator:基础类(Person类)不需要进行修改,符合POJO风格,比较方法由排序者自行定义,便于扩展
comparable接口:基础类通过实现接口方法设定既定排序,扩展性差,与基础类耦合度太高
欢迎加入微信公众号
![](https://img.haomeiwen.com/i8032363/4a97590e8244fb33.png)
网友评论