ArrayList本身不自带排序功能,需通过Collections.sort()或list.sort()配合Comparable接口或Comparator实现升序、降序及自定义规则排序,支持自然顺序、Lambda表达式、多级排序及null安全处理。

Java 中 ArrayList 本身不自带排序功能,但可以通过多种标准方式对其中的元素进行排序,核心是借助 Collections.sort() 或 list.sort() 方法,配合自然顺序(要求元素实现 Comparable)或自定义比较逻辑(传入 Comparator)。
使用 Collections.sort() 进行排序
这是最常用的方式,适用于所有实现了 Comparable 接口的类型(如 String、Integer、Double 等),也支持传入 Comparator 实现自定义规则:
- 对数字列表升序:直接调用
Collections.sort(list) - 对字符串列表:默认按字典序排序,同样用
Collections.sort(list) - 降序或复杂规则:传入匿名内部类、Lambda 表达式或方法引用,例如:
Collections.sort(list, (a, b) -> b.compareTo(a));(降序)
使用 List.sort()(推荐 Java 8+)
ArrayList 自身继承了 List.sort(Comparator) 方法,语义更清晰,且无需额外导入工具类:
- 升序(元素可比):
list.sort(null); - 降序:
list.sort(Collections.reverseOrder()); - 按字符串长度排序:
list.sort(Comparator.comparing(String::length)); - 多级排序(先按长度,再按字典序):
list.sort(Comparator.comparing(String::length).thenComparing(String::compareTo));
自定义对象排序的关键点
若 ArrayList 这类自定义类要排序,需满足以下任一条件:
- 让
Person实现Comparable接口,并重写compareTo()方法(定义“自然顺序”) - 不改类定义时,用
Comparator显式指定规则,例如按年龄:list.sort(Comparator.comparingInt(p -> p.getAge())); - 注意:Comparator 中的 lambda 或方法引用不能抛出受检异常;字段为 null 时需用
Comparator.nullsFirst()或nullsLast()处理
注意事项与常见问题
排序操作是原地修改(in-place),不生成新列表;若需保留原顺序,应先调用 new ArrayList(originalList) 复制一份:
- 基本类型包装类(
Integer、String)默认支持排序,无需额外处理 - 空集合或含
null元素时,自然排序会抛NullPointerException,务必提前校验或用nullsLast()等防护 - 并发环境下,
ArrayList非线程安全,排序前建议确保无其他线程在修改该列表
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











