list.sort(comparator.naturalorder()) 可对实现 comparable 接口的元素(如 integer、string)就地升序排序,不支持 null 和未实现 comparable 的自定义类,推荐优先使用该方法而非 collections.sort()。

Java 中的 List.sort() 方法可以直接对列表进行就地排序(即修改原列表,不创建新列表),配合 Comparator.naturalOrder() 可以按元素的自然顺序升序排列——前提是列表元素实现了 Comparable 接口(如 String、Integer、LocalDate 等)。
确保元素类型支持自然排序
Comparator.naturalOrder() 依赖元素自身的 compareTo() 方法。如果元素未实现 Comparable,运行时会抛出 ClassCastException。
- ✅ 支持的类型:
Integer、String、Double、LocalDateTime等 JDK 内置可比较类型 - ❌ 不支持的类型:自定义类(如
Person)默认不实现Comparable,需手动实现或改用其他比较器
基本用法:调用 sort() 并传入 naturalOrder()
只需一行代码即可完成升序排序:
List<integer> numbers = new ArrayList(Arrays.asList(5, 2, 8, 1)); numbers.sort(Comparator.naturalOrder()); // 就地升序 // 结果:[1, 2, 5, 8]</integer>
同理适用于字符串:
List<string> words = new ArrayList(Arrays.asList("banana", "apple", "cherry"));
words.sort(Comparator.naturalOrder());
// 结果:["apple", "banana", "cherry"]</string>
注意 null 值处理
Comparator.naturalOrder() **不能处理 null 元素**。若列表含 null,调用时会抛出 NullPointerException。
- 安全做法:先过滤掉
null,或使用Comparator.nullsFirst(Comparator.naturalOrder()) - 示例(null 排最前):
list.sort(Comparator.nullsFirst(Comparator.naturalOrder())) - 示例(null 排最后):
list.sort(Comparator.nullsLast(Comparator.naturalOrder()))
与 Collections.sort() 的区别
List.sort() 是 List 接口定义的默认方法,专为 ArrayList、LinkedList 等具体实现优化(如 ArrayList 内部转为数组后调用 Arrays.sort());而 Collections.sort(list) 是静态工具方法,底层也调用 list.sort(...),二者行为一致,但推荐直接用 list.sort() 更直观。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











