当前位置: 首页 > news >正文

列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()

  • 列表类型

一.Collections.sort()

Collections.sort()用于List类型的排序,其提供了两个重载方法:

1.sort(List<T> list)

(1)List指定泛型时只能指定引用数据类型,也就是说无法用于基本数据类型的排序。

(2)如果T是String类型,则会按字典顺序进行升序排序。

(3)对于八大包装类,除了Boolean以外均实现了Comparable接口,默认按数字顺序进行升序排序。

(4)如果T是自定义数据类型,则前提是T必须实现Comparable接口,并重写其compareTo()方法,才能使用该方法进行排序。

2.sort(List<T> list , Comparator<? super T> c)

(1)这种方式会对传入的List对象,按照比较器c的规则进行排序

(2)如果类T实现过Comparable接口,则比较器Comparator的比较规则会优先于Comparable的比较规则

可以看到原本Student类实现Comparable接口,在compareTo()方法中要求按age进行升序排序,但是执行Collections.sort()方法时会优先按传入的比较器进行排序,而比较器中的compare()方法要求按age进行降序排序。

(3)上述写法也可以通过lambda表达式简写

二.list.sort()

list.sort()只有一种写法,没有重载方法

1.sort(Comparator<? super E> c)

(1)这个sort()方法是属于List类的一个普通方法,通过对象调用

(2)需注意的是:使用该方法必须传入一个Comparator对象指定排序规则。列表指定的泛型对象实现的Comparable接口在该方法的调用中是无效的,只能按Comparator指定的排序规则排序。

(3)上述Collections.sort()的例子中,studentList的排序可以替换成:

(4)同样可以用lambda表达式简写

三.list.stream().sorted()

list.stream().sorted()存在两个重载方法

1.list.stream().sorted().collect(Collectors.toList())

(1)使用方法与上述的Collections.sort()相同,sorted()会对List对象进行自然排序

(2)List指定的泛型对象需要实现Comparable接口,排序时会按其compareTo()方法进行排序

(3)上述studenList使用这种方法进行升序排序

2.list.stream().sorted(Comparator<? super E> c).collect(Collectors.toList())

(1)使用方法与上述sort(Comparator<? super E> c)相同

(2)上述studenList使用这种方法进行降序排序(使用lambda表达式简写)

3.注意

(1)sorted()实际是Stream类的一个普通方法,因此需要通过list.stream()先获取到列表的流对象才能调用

(2)list.stream().sorted()并不会对list对象进行排序,而是会返回一个按排序规则排好的Stream对象,而原list对象不会发生任何改变。而.collect(Collectors.toList())用于将Stream对象转成List对象。

(3)按照上述说法,若想对list进行排序,则该方法的完整使用方法是:

list = list.stream().sorted().collect(Collectors.toList());

  • 数组类型

一.Arrays.sort()

Arrays.sort()提供了两个重载方法

1.Arrays.sort(T[] a)

(1)若T为基本数据类型,则按照数字顺序进行升序排序

(2)若T为String类型,则按照字典顺序进行升序排序

(3)若T为引用数据类型,则T必须实现Comparable接口并重写其compareTo()方法才能排序

(4)八大包装类除Boolean外都实现了Comparable接口,按数字顺序升序排序

(5)对Student类型数组进行升序排序(上述Student类已经实现了Comparable接口,其compareTo()方法指定按age进行升序排序)

2.Arrays.sort(T[] a, Comparator<? super T> c)

(1)用法与上述使用Comparator进行排序的方式相同

(2)对students数组进行降序排序(使用lambda表达式简写)

  • 总结

1.Collections

(1)sort()

(2)是Collections类的静态方法,通过类调用

(3)需传入排序对象,排序对象就是传入的列表对象

(4)支持Comparable和Comparator两种方式

(5)用于List对象,只支持引用数据类型

2.List

(1)sort()

(2)是List类的普通方法,通过对象调用

(3)无需传入排序对象,排序对象就是调用者本身

(4)只支持Comparator

(5)用于List对象,只支持引用数据类型

3.Stream

(1)sorted()

(2)是Stream类的普通方法,通过对象调用

(3)无需传入排序对象,排序对象不是调用者,而是一个新的对象并以返回值返回

(4)支持Comparable和Comparator两种方式

(5)用于List对象,只支持引用数据类型

4.Arrays

(1)sort()

(2)是Arrays类的静态方法,通过类调用

(3)需传入排序对象,排序对象就是传入的数组对象

(4)支持Comparable和Comparator两种方式

(5)用于数组对象,支持基本数据类型和引用数据类型

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql性能优化-延迟写和异步写优化
  • Python中使用Redis布隆过滤器
  • miniconda环境配置
  • 深度学习自编码器 - 收缩自编码器(CAE)篇
  • 信安 实验1 用Wireshark分析典型TCP/IP体系中的协议
  • OpenCV运动分析和目标跟踪(3)计算图像序列的加权平均值函数accumulateWeighted()的使用
  • PyCharm用法
  • git拉取大文件
  • 数据库基础知识---------------------------(3)
  • solidwork剪裁实体
  • 【软考】计算机软件著作权
  • vscode关闭git的提交提示
  • 第一章 初识SpringBoot
  • 王者荣耀英雄检测数据集
  • QNX Hypervisor(十一)Linux Guest IPC 三
  • .pyc 想到的一些问题
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 3.7、@ResponseBody 和 @RestController
  • CSS居中完全指南——构建CSS居中决策树
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript 基本功--面试宝典
  • java正则表式的使用
  • MySQL的数据类型
  • node-glob通配符
  • php面试题 汇集2
  • Rancher-k8s加速安装文档
  • SpringBoot几种定时任务的实现方式
  • SQLServer之创建显式事务
  • 多线程事务回滚
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端学习笔记之观察者模式
  • 区块链分支循环
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 软件开发学习的5大技巧,你知道吗?
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 容器镜像
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • (0)Nginx 功能特性
  • (8)STL算法之替换
  • (C++)八皇后问题
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (纯JS)图片裁剪
  • (二)windows配置JDK环境
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Sublime Text3配置Lua运行环境
  • .Mobi域名介绍
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 药厂业务系统 CPU爆高分析