列表、数组排序总结: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)用于数组对象,支持基本数据类型和引用数据类型
相关文章:
列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()
列表类型 一.Collections.sort() Collections.sort()用于List类型的排序,其提供了两个重载方法: 1.sort(List<T> list) (1)List指定泛型时只能指定引用数据类型,也就是说无法用于基本数据类型的排序。 &am…...
【资料分析】刷题日记3
第一套 √ 考点:基期比重差很温柔的题 普通专科女生 占比 52.5% - 1.7% 50.8% 成人本专科女生 占比 57.8% - 4.6% 53.2% 相比降低了2.4% 知比重和部分量,求整体在花生老师的解法中体会啥叫适当约分 0.1899 / 47.8% / 87.5% 》0.19 / (4…...
基于SpringBoot+Vue的商场停车场管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...
4. 密码协议
4. 密码协议 (1) 协议的基本概念 协议是一种在两个或多个参与者之间进行通信的规范,它定义了参与者之间的交互方式、消息格式和通信过程。协议的目的是确保通信的可靠性和安全性,防止信息被篡改、伪造或泄露。 (2) 密码协议分类及基本密码协议 密码协议是用于加密和解密数…...
基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)
演示 智能物流柜(基础版) 智能物流柜(升级版) 前言 这是本人在大二在学校接的一个简单的实验室项目,之前发布了一个,由于那是在暑假,家里器材有限,代码敲完之后,用面包板…...
VSCode创建C++项目和编译多文件
前言 在刚安装好VSCode后,我简单尝试了仅main.cpp单文件编译代码,没有问题,但是当我尝试多文件编译时,就出现了无法识别cpp文件。 内容 创建项目 首先点击左上角“文件”;在菜单中选择“打开文件夹”;在…...
7个提升网站分页体验的 CSS 和 JavaScript 代码片段
文章目录 前言正文1.简洁直观的悬停分页效果2.实时显示页码的分页3.适合响应式设计的多功能分页4.专为移动设备优化的分页5.无数字的极简分页设计6.触屏友好的分页7.结合无限滚动与分页的设计 总结 前言 分页是内容丰富的网站中不可缺少的导航工具,能帮助用户更轻松…...
C++——用带有默认参数的函数实现,求两个整数或三个整数中的最大数。
没注释的源代码 #include <iostream> using namespace std; int max(int a,int b,int c0); int main() { int a,b,c; cout<<"请输入三个整数:"; cin>>a>>b>>c; cout<<"三个整数的最大值是&am…...
对商品分类系统的若干问题的思考
科学研究的目的就是研究事物的特征,并根据共同的特征加以分类 商品分类是商业,制造业中最普遍的活动,几乎所有的企业,电商平台都要对销售的商品,使用的原材料(BOM)进行分类和编号。 商品分类貌似…...
javascript中Number 类型 在实际开发中常用的一些操作方法
在 JavaScript 中,Number 类型是非常基础的数据类型之一,用于表示整数和浮点数。除了基本的算术运算外,还有许多内置的方法可以帮助你处理数字。下面列举了一些在实际开发中常用的 Number 类型的操作方法: 1. 转换方法 Number()…...
部分解决FDTD安装后,matlab指令fopen报错
今天在新的win11电脑上安装FDTD时,发现在C:\Program Files目录中并没有Lumerical文件夹,把激活文件粘贴过去后虽然能正常启动,但对于matlab link FDTD过程中无法响应以下代码: setenv(PATH, [getenv(PATH) ;C:\Program Files\Lum…...
[python3] 处理函数的重试
tenacity是一个 Python 库,用于简化重试逻辑的实现。它提供了装饰器和工具函数,使得在函数执行失败时可以自动重试。以下是对tenacity库的详细介绍: 一、安装 可以使用pip安装tenacity: pip install tenacity二、主要概念和功能…...
鸿蒙开发之ArkTS 界面篇 一
建好一个工程后,右侧可以预览,看到效果,效率十分可以,如图: State message: string 鸿蒙开发入门篇; 这个字符串改成什么,右侧就显示什么 Entry是类装饰器,可以简单的理解为程序入口的必须的装饰器&…...
嵌入式Linux学习笔记(6)-线程处理、线程同步、线程池(c语言实现)
一、概述 线程是一种轻量级的并发执行的机制。线程是进程中的一个实体,它执行在同一进程的上下文中,共享同一内存空间,但拥有独立的栈空间。 C语言的线程使用pthread库实现,通过包含头文件 pthread.h 来使用相关的函数和数据类型 …...
【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
Host 表示服务器主机的地址和端口号 URL 里面不是已经有 Host 了吗,为什么还要写一次? 这里的 Host 和 URL 中的 IP 地址、端口什么的,绝大部分情况下是一样的,少数情况下可能不同当前我们经过某个代理进行转发。过程中…...
【刷题日记】43. 字符串相乘
43. 字符串相乘 其实就是大数乘法题,这道题用草稿纸演练一下,其实很好找到方法,模拟大数乘法即可。需要注意的是进位和迭代值,还有注意向下取整和去除前导0(容易遗漏)。去除前导0的时候还要注意如果全是0&…...
Verilog学习之旅~
记录Verilog的学习日常~ 第一阶段:牛客网刷题 1.Verilog快速入门 基础语法 VL1:四选一多路器:case语句、条件表达符; VL2:异步复位的串联T触发器:T触发器的基本功能及代码实现、异步复位的概念; VL3:奇偶校验:缩…...
linux之mysql安装
1:mysql安装包下载 下载地址 可私信我直接获取安装包 2:linux下wget命令下载 下载地址 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz3:手动安装 将自己的安装包上传到对应的位置 解压 压缩包 使用命令 tar -zxvf mysql-5.7…...
单身狗的逆袭之路之开发相亲交友系统
在这个充满机遇与挑战的时代,单身人士渴望找到属于自己的幸福。然而,在忙碌的工作与生活中,他们往往难以抽出时间去拓展社交圈。相亲交友系统的出现,无疑是为这些“单身狗”提供了一个逆袭的机会。通过相亲交友系统,用…...
【Spring】IocDI详解(6)
本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 有什么不懂的都可以问我,看到消息会回复的,可能会不及时,请见谅!! 目录 本系列共…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

