Collections.sort()用于List排序,要求元素实现Comparable或传入Comparator;仅适用于List及其子类,支持自然排序与定制排序,是稳定排序且直接修改原列表。

Collections.sort() 是 Java 中对 List 进行排序最常用的方法,它要求列表元素实现 Comparable 接口(自然排序),或传入一个 Comparator(定制排序)。它只适用于 List 及其子类(如 ArrayList、LinkedList),不能用于 Set 或 Map。
基础用法:对 String、Integer 等内置类型排序
这些类型已实现 Comparable,可直接调用 Collections.sort(list):
- String 列表按字典序升序排列
- Integer 列表按数值大小升序排列
- Double、LocalDate 等也支持,前提是元素非 null
⚠️ 注意:若列表含 null 元素,会抛 NullPointerException;若元素类型不一致(如混入 String 和 Integer),运行时报 ClassCastException。
对自定义对象排序:实现 Comparable 接口
让实体类实现 Comparable<T> 并重写 compareTo() 方法,即可用无参 sort():
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 例如
Person类按年龄升序:return this.age - p.age; - 字符串字段建议用
name.compareTo(p.name),避免空指针 - 多字段组合排序可链式比较:
Integer.compare(this.age, p.age) != 0 ? ... : this.name.compareTo(p.name)
灵活排序:使用 Comparator 匿名类或 Lambda 表达式
无需修改类定义,适合临时排序逻辑或多种排序方式并存:
- Lambda 写法简洁:
Collections.sort(people, (p1, p2) -> p1.getName().compareTo(p2.getName())); - 按年龄降序:
(p1, p2) -> Integer.compare(p2.getAge(), p1.getAge()) - JDK 8+ 推荐用
Comparator.comparing()链式调用:Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName)
注意事项与常见问题
该方法是**稳定排序**(相等元素相对位置不变),且直接修改原列表,不返回新列表。
- 对
LinkedList排序性能略低于ArrayList(因随机访问开销) - 若需保留原顺序,先
new ArrayList(originalList)再排序 - 不可对不可变列表(如
Arrays.asList()返回的固定大小列表)排序——会抛UnsupportedOperationException,需转为new ArrayList<>() - 并发场景下需确保列表未被其他线程修改,否则行为未定义

















