Java中对ArrayList排序主要用Collections.sort()或list.sort(),要求元素实现Comparable接口或提供Comparator;支持自然升序、自定义降序、多级排序及自定义类排序,注意空值处理和类型安全。

Java 中对 ArrayList 元素排序,主要靠 Collections.sort() 方法或 list.sort() 实例方法,前提是元素类型实现 Comparable 接口(如 String、Integer),或你提供一个 Comparator 对象来定义排序规则。
基本升序排序(元素自带自然顺序)
如果 ArrayList 存的是 Integer、String、LocalDate 等已实现 Comparable 的类型,直接调用 sort() 即可:
-
Collections.sort(list)—— 静态方法,适用于所有List -
list.sort(null)—— 实例方法,传null表示使用元素的自然顺序
例如:
List
Collections.sort(nums); // → [1, 2, 5, 8]
自定义降序或非自然顺序排序
用 Comparator 控制排序逻辑。Java 8 起推荐用方法引用或 Lambda 表达式写得更简洁:
- 降序:用
Comparator.reverseOrder()或Comparator.comparing(...).reversed() - 按字符串长度排序:
list.sort(Comparator.comparing(String::length)) - 按对象某个字段排序(如 Person.name):
list.sort(Comparator.comparing(p -> p.getName())) - 多级排序(先按年龄,年龄相同时按姓名):
list.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName))
对自定义类排序(需手动指定规则)
如果你的 ArrayList 存的是自定义对象(比如 Book),它默认不支持排序。有两种方式:
-
方式一(推荐):不改类,外部传
Comparator,比如books.sort(Comparator.comparing(Book::getTitle)) -
方式二:让类实现
Comparable并重写compareTo(),之后就能直接用Collections.sort(books)
注意:修改原 list 是“就地排序”,不会创建新列表;如需保留原顺序,先 new ArrayList(original) 复制一份再排。
排序前注意空值和类型安全
常见坑点要提前处理:
- 列表含
null元素时,自然排序会抛NullPointerException;可用Comparator.nullsFirst()或nullsLast()包装 - 确保所有元素是同一类型或有共同父类,否则运行时报
ClassCastException - 若 list 是由
Arrays.asList()创建的,它是固定大小的,调用sort()没问题,但不能增删元素
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











