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

Java开发中几种常规的排序编程方案

1. 使用 Arrays.sort() 和 Collections.sort()

List<Integer> list = Arrays.asList(5, 2, 8, 1);
Collections.sort(list);
// 结果:[1, 2, 5, 8] ← 默认升序Collections.sort(list, Collections.reverseOrder());
// reverseOrder()降序Collections.sort(list, (a, b) -> b - a);// lambda 表达式降序

2. 实现 Comparable 接口

import java.util.*;// 1. 实现 Comparable 接口
class Student implements Comparable<Student> {private String name;private int score;private int age;// 构造方法public Student(String name, int score, int age) {this.name = name;this.score = score;this.age = age;}// getter 方法public String getName() { return name; }public int getScore() { return score; }public int getAge() { return age; }// 2. 实现 compareTo() 方法@Overridepublic int compareTo(Student other) {// 主要按分数降序(分数高的在前)if (this.score != other.score) {return other.score - this.score;  // 降序}// 分数相同按年龄升序if (this.age != other.age) {return this.age - other.age;  // 升序}// 分数和年龄都相同按姓名升序return this.name.compareTo(other.name);}@Overridepublic String toString() {return name + "(" + score + "分," + age + "岁)";}
}public class ComparableDemo {public static void main(String[] args) {// 3. 创建对象列表List<Student> students = Arrays.asList(new Student("张三", 85, 18),new Student("李四", 90, 17),new Student("王五", 85, 19),new Student("赵六", 90, 17),new Student("钱七", 80, 18));System.out.println("排序前:");students.forEach(System.out::println);// 4. 直接排序(使用 Comparable)Collections.sort(students);System.out.println("\n排序后(按分数降序→年龄升序→姓名升序):");students.forEach(System.out::println);}
}

默认实现comparable接口的基础类排序规则:

  • 数值包装类,按数字大小升序;
  • String,逐个字符比较 Unicode 值,如果所有字符都相等,比较长度,升序;
  • 时间日期类,按时间先后升序排序(早的在前,晚的在后);
  • BigDecimal,按数字大小升序;

3. Comparator

class Student {String name;int score;int age;String className;
}List<Student> sorted = new ArrayList();Comparator<Student> elegant = Comparator.comparing(Student::getClassName)           // 班级升序.thenComparing(Student::getScore, Comparator.reverseOrder()) // 分数降序.thenComparingInt(Student::getAge)          // 年龄升序.thenComparing(Student::getName);           // 姓名升序sorted.sort(elegant);

如果有更复杂的排序规则,也可以自定义分组排序

class User {String name;boolean isVip;LocalDateTime registerTime;
}Comparator<User> vipFirst = (u1, u2) -> {// VIP 优先规则if (u1.isVip() && !u2.isVip()) return -1;    // u1是VIP,u2不是 → u1在前if (!u1.isVip() && u2.isVip()) return 1;     // u1不是VIP,u2是 → u1在后// 都是VIP或都不是VIP,按注册时间排序return u1.getRegisterTime().compareTo(u2.getRegisterTime());
};

4. Java 8+ Stream 排序

List<Person> sortedList = persons.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());// 多字段排序
List<Person> sorted = persons.stream().sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName)).collect(Collectors.toList());

5. 并行排序
推荐数据量到达十万乃至百万级使用,否则性能开支过大,速度也不一定更快。

// 数组并行排序
int[] arr = {5, 2, 8, 1};
Arrays.parallelSort(arr);// 并行流排序
List<Person> sorted = persons.parallelStream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
http://www.jsqmd.com/news/366560/

相关文章:

  • 退役记
  • 2026军用实时侦察成像无人机集群软硬一体化供应商优选推荐,猎翼无人机成军用实时成像新选择 - 品牌2025
  • 揭秘:东方墨兰能领的最大面额红包是多少,美团App更便宜更省心 - 资讯焦点
  • 2026军用多机协同无人机蜂群系统供应商推荐与猎翼无人机的核心优势讲解 - 品牌2025
  • 实测有效!奈雪的茶外卖如何减免配送费,美团满减+神券双重省 - 资讯焦点
  • 2026陕西标识导视设计Top5榜单:行业积淀与落地能力综合评测 - 深度智识库
  • 亚马逊多账号登录怎么防关联?附详细方法技巧! - Roxy指纹浏览器
  • Java计算机毕设之基于Java+springboot的名贵物品文物在线拍卖系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 实测|固体杨枝甘露外卖还能点吗,好吃吗?美团点单省一半 - 资讯焦点
  • 微信公众号文章批量导出下载工具 v2.2.1
  • 刷爆kafka经典面试题100道覆盖全场景!
  • 智元机器人办了场“春晚“、DroidUp发布仿生人Moya、Atlas翻后空翻|人形机器人日报 2.10
  • 2026年重庆涂塑钢管哪家专业?适配多场景工程的靠谱选择 聚焦防腐技术与交付能力 - 深度智识库
  • 基于C# WinForm实现串口数据读取与实时折线图显示
  • 合肥三十六行潍坊分公司:赋能鸢都商户,深耕本地生活数字化运营 - 野榜数据排行
  • 2026年如何选择:GEO优化及海外SEO综合服务商推荐 - 品牌推荐大师
  • Bidirectional Reward-Guided Diffusion for Real-World Image Super-Resolution
  • Kafka从入门到上天系列第五篇:一文吃透ZooKeeper的ZNode:定义、物理形态、作用及Watch机制详解
  • 【毕业设计】基于springboot的在线拍卖系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 2026企业BI私有化部署推荐:靠谱企业BI私有化部署方案商、厂商、公司推荐 - 品牌2025
  • 15TypeScript 与组合式 API
  • 【计算机毕业设计案例】基于Java springboot网络书籍阅读写作系统基于springboot的网络阅读与写作(程序+文档+讲解+定制)
  • 2026年GEO服务商综合选择指南:AI时代品牌认知争夺战的技术伙伴 - 品牌策略主理人
  • 手把手教你学Simulink--基于多能互补微电网系统的建模与优化场景实例:光储氢一体化微电网能量管理与调度仿真
  • 2026医院标识/发光字/沙盘模型设计权威推荐 老牌实力企业榜单 - 深度智识库
  • 真的太省时间!千笔·专业论文写作工具,口碑爆棚的AI论文软件
  • 2026年天虹购物卡回收平台实测!闲置卡变现不亏攻略 - 京回收小程序
  • 【计算机毕业设计案例】基于springboot的在线拍卖商品拍卖、订单处理系统的设计与实现(程序+文档+讲解+定制)
  • 电机nvh分析电磁仿真Maxwell电机电磁振动噪声NVH分析 包括Maxwell仿真基础 电...
  • 2026 年 02 月 10 日 AI 前沿、通信和安全行业日报