ArrayList排序推荐使用sort()配合Comparator,支持属性升降序、多级排序及null处理;也可用Collections.sort()、实现Comparable接口或Stream.sorted()生成新列表。

ArrayList 排序主要靠 原地修改 或 生成新列表 两种思路,核心是借助 Java 提供的排序接口。最常用、最推荐的方式是使用 sort() 方法配合 Comparator,而不是手动写冒泡或快排——既安全又高效。
用 List.sort() + Comparator 按属性排序(最常用)
这是 Java 8+ 的标准做法,简洁、可读性强,支持链式组合和升降序切换:
- 按单个
int属性升序:list.sort(Comparator.comparingInt(s -> s.age)); - 按
String属性升序:list.sort(Comparator.comparing(s -> s.name)); - 先按 age 升序,再按 name 升序:
list.sort(Comparator.comparingInt(s -> s.age).thenComparing(s -> s.name)); - 按 age 降序:
list.sort(Comparator.comparingInt(s -> s.age).reversed()); - 处理可能为
null的字段:list.sort(Comparator.comparing(Student::getName, Comparator.nullsFirst(String::compareTo)));
用 Collections.sort() 实现相同效果
功能与 list.sort() 几乎一致,只是调用位置不同,适合需要统一工具类管理的旧项目风格:
- 基本用法:
Collections.sort(list, Comparator.comparingInt(s -> s.age)); - 对已实现
Comparable的类型(如String、Integer),可直接:Collections.sort(stringList); - 注意:该方法不返回新列表,而是直接修改原列表。
让实体类自己支持排序(实现 Comparable)
适用于该类有明确、固定的“自然顺序”,比如学生默认按学号排、订单默认按创建时间排:
- 在类中实现
Comparable接口并重写compareTo: public class Student implements Comparable<student> { public int compareTo(Student other) { return Integer.compare(this.id, other.id); } }</student>- 之后调用
Collections.sort(list)或list.sort(null)即可按自然序排列。
用 Stream.sorted() 获取新排序列表(不改原列表)
适合函数式风格或需要保留原始顺序的场景,注意它返回的是新 List,不是原地修改:
List<student> sorted = list.stream().sorted(Comparator.comparingInt(s -> s.age)).collect(Collectors.toList());</student>- 链式操作方便,但涉及中间流对象,小数据量无感,大数据量时略低于原地排序的性能。


















