Comparable和Comparator比较实现排序 场景分析
Posted 2019wxw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Comparable和Comparator比较实现排序 场景分析相关的知识,希望对你有一定的参考价值。
源码分析 - Collections.sort()
一、Collection.sort使用
Collections.sort():是对一个集合进行正向排序的方法首先,传入Collections.sort()的集合的元素类型要继承Comparator<T>,这样才能保证可以比较并排序。
根据源码分析,实现方式主要有两种:
(1)对普通类型和String等类型排序
(2)对JavaBean某个属性(比如时间,价格,年龄排序)进行排序
使用案例:
List<String> listOne = Arrays.asList("3", "2", "5", "8"); Collections.sort(listOne);//默认升序 System.out.println("listOne = " + listOne); /** * 输出结果: * listOne = [2, 3, 5, 8] */
二、collections.sort对javabean的list进行排序
算法底层实际是 将集合转换成array,再执行arrays.sort,arrays.sort利用归并排序,优化的快排,timSort等方式。
2、对string类型数据排序
分析String源码;
因为String类型实现了Comparable<String> 接口,所以可以使用Collections.sort(unSorted)进行排序;
List<String> unSorted = new ArrayList<String>(); Collections.sort(unSorted); //String实现了Comparable接口
注意:由于自定义的javabean未实现,所以不能直接使用,但是可以实现一个比较器:
方式一:
Collections.sort(unSorted,new Comparator<unSortedBean>() { @Override public int compare(unSortedBean arg0, unSortedBean arg1) { // 升叙 return arg0.getOrder()-arg1.getOrder(); } });
方式二:
也可以用collections.sort();方式,只需要javabean实现comparable接口并用compareTo()方法实现升序还是降序;
以上是关于Comparable和Comparator比较实现排序 场景分析的主要内容,如果未能解决你的问题,请参考以下文章
Java 中 Comparable 和 Comparator 比较
Java的Comparable内部比较器和Comparator外部比较器