java中collections.sort()仅支持list且要求元素实现comparable或传入comparator;会直接修改原列表;不可变list需转为arraylist;java 8起推荐使用list.sort()替代。

Java 中使用 Collections 工具类对集合排序,核心是调用 Collections.sort() 方法,它只支持 List 类型,且要求元素实现 Comparable 接口(自然排序),或传入自定义 Comparator(定制排序)。
自然排序:元素自身实现 Comparable
如果 List 中的元素(如 String、Integer、LocalDate 等)已实现 Comparable,直接调用 sort(list) 即可:
- 字符串按字典序升序排列:
Collections.sort(list); - 整数按数值大小升序:
Collections.sort(numbers); - 注意:该方法会**直接修改原 List**,不返回新列表
定制排序:传入 Comparator 实现灵活规则
当需要按特定逻辑排序(如降序、按对象字段排序),可传入 Comparator:
- 降序:用
Collections.reverseOrder()——Collections.sort(list, Collections.reverseOrder()); - 按 Person 的年龄升序:
Collections.sort(people, Comparator.comparing(p -> p.getAge())); - 多级排序(先按姓名,再按年龄):
Collections.sort(people, Comparator.comparing(Person::getName).thenComparing(Person::getAge));
对不可变或只读 List 排序需先转为可变类型
Collections.unmodifiableList() 或 Arrays.asList() 返回的 List 可能不支持修改。排序前需确保它是可修改的 ArrayList:
- 安全做法:
List<string> mutable = new ArrayList(originalList); Collections.sort(mutable);</string> - 避免
UnsupportedOperationException
替代方案:优先考虑 List.sort()(Java 8+)
从 Java 8 开始,List 自带 sort() 方法,语义更清晰,推荐日常使用:
- 自然排序:
list.sort(null);(等价于Collections.sort(list)) - 定制排序:
list.sort(Comparator.comparing(...)); - 两者行为一致,但
list.sort()更直观,无需静态导入工具类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











