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

常用的集合类有哪些?比如List如何排序?

Java的集合类整体分为两大核心体系,不同实现类适配不同的业务场景,List的排序也有多种适配不同JDK版本的实现方式,具体内容如下:

一、常用集合类分类

Java集合类全部位于java.util包中,核心分为Collection和Map两大独立体系:

Collection体系(存储单个独立元素)‌

List分支‌:有序可重复,支持通过下标访问元素

ArrayList:底层是动态数组,随机查询性能极高,是日常开发90%场景的首选集合,仅在中间位置增删元素时需要批量移动数据,大数据量下性能会下降
LinkedList:底层是双向链表,头尾增删元素仅需修改指针,性能优异,但不支持下标随机访问,遍历查询效率较低

Set分支‌:元素不可重复

HashSet:底层基于哈希表实现,完全无序,是纯去重工具
LinkedHashSet:哈希表结合链表实现,保留元素插入顺序,去重同时保证顺序不乱
TreeSet:底层基于红黑树实现,支持元素自动排序,是有序去重的首选

Queue分支‌:主打排队机制

普通队列遵循先进先出规则,优先级队列底层基于堆结构实现,支持按任务权重排序,高优先级元素优先出队
Map体系(存储键值对映射)‌
HashMap:底层基于哈希表实现,无序,是日常开发高性能存储的主力实现
LinkedHashMap:哈希表结合链表实现,保留键的插入顺序,适合做有序缓存
TreeMap:底层基于红黑树实现,全局自动排序,适合需要按键自然序遍历的场景
早期的Hashtable自带全局同步锁,性能极差,目前已基本被淘汰

二、List的常见排序方式

Java中List排序有3种主流实现方案,适配不同的业务需求:

基于Comparable接口的自然排序‌

让自定义实体类实现Comparable接口,重写compareTo方法定义默认排序规则,直接调用Collections.sort(list)即可完成排序,适合实体类自带固定排序逻辑的场景。

classPersonimplementsComparable<Person>{privateintage;// 省略构造、get/set方法@OverridepublicintcompareTo(Personp){// 按年龄降序排序returnp.getAge()-this.age;}}

// 直接调用排序
List list = new ArrayList<>();
Collections.sort(list);

基于Comparator接口的自定义排序‌

无需修改原有实体类,通过外部比较器灵活定义临时排序规则,支持匿名类、Lambda简化写法,适配需要动态切换排序逻辑的场景。

// 按年龄升序,使用Lambda简化写法list.sort((p1,p2)->Integer.compare(p1.getAge(),p2.getAge()));// 基础类型集合快速降序List<Integer>nums=Arrays.asList(5,3,8,1);Collections.sort(nums,Collections.reverseOrder());

JDK 8+ Stream流排序‌

借助Stream的sorted()方法实现链式排序,支持多字段组合排序,代码可读性更高,还可以结合并行流利用多核CPU提升大集合排序效率。

// 先按年龄降序,年龄相同再按ID升序List<Person>sortedList=list.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getId)).collect(Collectors.toList());
http://www.jsqmd.com/news/1146081/

相关文章:

  • 百度网盘提取码智能解析工具:5秒实现资源访问自动化的技术方案
  • 机器学习模型过拟合实战排查:从 3 个维度识别与 4 种正则化策略调优
  • 黑箱API微调:无需模型权重的大模型定制化实践指南
  • HARP-VLA:面向具身智能的端到端人机对齐操作系统
  • 从困惑到清晰:openEuler社区问题归属定位的终极指南
  • 资源页面 外链 Resource Link Building:没内容的商城站怎么让老外加链接?
  • 十年Java老兵转投AI编程:用Cursor和Copilot重构微服务
  • STM32G0B1RE与TPIS1S1385实现高精度人体存在检测方案
  • 豆包开始内测社交功能,一个影响企业AI布局的新信号出现了
  • 2026 AI标书软件TOP7综合横评:防废标、查重、全流程能力才是企业选型分水岭
  • Streamable HTTP
  • Kaggle心血管疾病数据集实战:5种算法对比与投票法融合,准确率提升3%
  • 还在手写YAML?这几款 Docker Compose 管理面板让你效率翻倍!
  • claude code 基础指令积累
  • Sticky便签工具:如何在Linux桌面上优雅管理你的碎片化信息?
  • 小波纹理特征提取 MATLAB 程序
  • 欧洲消暑品类跨境爆单复盘:Temu卖家高效铺货实操方案
  • Claude 3.5 Sonnet vs GPT-4o 多模态能力对比:5项真实任务实测与成本分析
  • 【零基础搭建】 OpenClaw 小龙虾,打造可自主操作电脑的数字助手(含安装包)
  • 2026小红书去水印方法教程:官方无水印保存与安全免费工具
  • 基因表达载体的构建伯远生物
  • 本地AI开发第0步:Node.js环境搭建与nvm版本管理实战
  • MoneyPrinterTurbo:从零到一的AI短视频自动化生成实践
  • 145、EIoU 到 SIoU 的替换对比:角度惩罚对旋转和倾斜目标的增益分析
  • AI风口来袭:小白程序员如何精准定位,稳入大模型赛道?速收藏!
  • 广州增城标识标牌生产制造商哪家好
  • 170、多 Agent 协作系统:AutoGen、CrewAI 的原理、角色分工与通信协议
  • 强化学习生成机器人演示数据:从仿真到实机的高质量轨迹构建方法
  • 几何感知控制屏障函数:伯恩斯坦SDF实现毫秒级碰撞规避
  • 从曝光、触达到留存:现代企业必备的全链路商务营销工具