集合常用的排序方法详解之单元素集合篇

2020-12-06  本文已影响0人  技术指北

常用的集合类无非是List、Set,及其他们的子类,其中List从jdk1.8开始是内置了排序方法的,且需要传入一个比较器作为参数;

源码内置排序

1、基础类型元素集合排序

基础类型的引用类,String

如:List<Integer>、List<Stirng>、Set<Integer>、Set<String>

1)对于List来说,直接用内置排序即可,例如:

List<Integer> list = new ArrayList<>();
 list.sort(new Comparator<Integer>() {
   @Override
   public int compare(Integer o1, Integer o2) {
     //升序
     return o1.compareTo(o2);
     //降序
    // return o2.compareTo(o1);
   }
 });

注意:注释中的升序降序代码

List 也可以使用流(Stream)的排序:

流排序

2)对于Set,有两种方式:

首先新建一个set集合:

代码截图

第一种:使用工具类Collections的排序,Collections的排序还是调用List的内置排序,所以需要把set转为list集合:

源码 升序排序

降序需要重写compareTo方法:

降序排序

第二种:使用流(Stream)中的排序方法:

流的排序不传参时也是默认升序,


流的升序排序

注意代码中划红线的地方,必须要用toList(),不然排序不起作用。

反例如下图:

排序失败代码示例

使用流时的降序,需要重写Comparator类的compareTo() 方法:


流的降序

这里总结一下Stream的排序跟List内置的排序处理的区别:

1)最大的一个区别是,Stream是对目标集合的深度复制的数据进行排序然后返回一个新的集合,对目标集合没有任何影响;而List内置的排序是直接操作的目标集合,直接将目标进行排序,不会生成新的集合。

2)另一个是,使用流排序,还可以开启并行流(parallelStream),在数据量多的时候能够大大提升性能。

ps:建议使用流的排序。

上面介绍的工具类都是基于在JDK8(含)之后的版本才支持的;

JDK8之前还有另一种排序方式,即转为数组,利用Arrays的排序,然后再转为list:

Arrays的内置排序

以上即是单元素集合的常见排序,当然各位友人是不喜欢,也可以自行实现排序逻辑,使用双重循环、递归之类的原始方式,好了,感谢大家的观看,后续将会整理对象集合的排序详解记得关注我哦

上一篇 下一篇

猜你喜欢

热点阅读