列表、数组排序总结: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。 博客涉及框架的重要知识点,根据序号学习即可。 有什么不懂的都可以问我,看到消息会回复的,可能会不及时,请见谅!! 目录 本系列共…...
Zotero插件市场终极指南:5步完成插件管理,效率提升96.7%
Zotero插件市场终极指南:5步完成插件管理,效率提升96.7% 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-…...
BililiveRecorder全攻略:高效录制B站直播的实战指南
BililiveRecorder全攻略:高效录制B站直播的实战指南 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 在数字内容爆炸的时代,直播内容因其即时性和互动性成为珍贵…...
5分钟快速上手:如何将STL文件转换为STEP格式实现跨平台设计协作?
5分钟快速上手:如何将STL文件转换为STEP格式实现跨平台设计协作? 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾遇到过这样的困境?精心设计的3D打印…...
暗黑破坏神2存档编辑器:5分钟解决20年存档管理难题的终极免费方案
暗黑破坏神2存档编辑器:5分钟解决20年存档管理难题的终极免费方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在《暗黑破坏神2》中花费数百小时培养角色,却因存档损坏而前功尽弃?…...
暗黑破坏神2存档修改终极指南:告别十六进制编辑,3步完成角色定制
暗黑破坏神2存档修改终极指南:告别十六进制编辑,3步完成角色定制 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》玩家设计的Web存档编辑器,通过直观的可视…...
KKManager技术指南:从基础配置到效能优化的全方位实践
KKManager技术指南:从基础配置到效能优化的全方位实践 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager 一、价值定位:重新定义模组管理…...
疑似 GPT-6 曝光! OpenAI 联合创始人亲口爆料 Spud 新一代AI模型,并且拥有“大模型气味”!网友评论:它是第一个真正会“思考”的型号!
Spud ,中文直译过来是“土豆”,这个命名方式也让小编想到了OpenAI 当时的 Strawberry (草莓)后来被命名为o1系列,那么,Spud 会是下一个o1吗?昨天,OpenAI总裁Greg Brockman在Big Technology Podcast上&#…...
Anthropic Skills 解析
Anthropic Skills 解析 基于 anthropics/skills 仓库的完整技术文档 概述 什么是 Skills? Skills(技能) 是包含指令、脚本和资源的文件夹,Claude 可以动态加载这些内容以提升在特定任务上的表现。Skills 教会 Claude 如何以可重…...
Go Routine 调度策略详解
Go Routine 调度策略详解 Go语言凭借其轻量级的并发模型——Goroutine,成为高并发编程的热门选择。Goroutine的高效运行离不开Go调度器的智能管理,而调度策略则是其核心机制。本文将深入解析Goroutine的调度策略,帮助开发者更好地理解并发执…...
ChatGLM3-6B Streamlit应用案例:代码辅助、长文档摘要、闲聊三合一
ChatGLM3-6B Streamlit应用案例:代码辅助、长文档摘要、闲聊三合一 1. 项目简介:你的本地全能AI助手 想象一下,你正在写一段复杂的代码,卡在某个逻辑上;或者面对一份几十页的技术文档,需要快速提炼核心&a…...

