Collections.reverse()用于原地反转可修改List的元素顺序,支持ArrayList、LinkedList等,不支持不可变列表或数组,使用时需注意空指针和不可修改异常,如需保留原列表应先复制。

Collections.reverse() 是 Java 集合工具类中一个简单高效的方法,专门用于**原地反转 List 中的元素顺序**,无需手动遍历或创建新集合,适合大多数需要快速倒序的场景。
一、基本用法:传入可变列表即可
该方法只接受 List 类型参数,且要求列表是可修改的(如 ArrayList、LinkedList),不支持不可变列表(如 Collections.unmodifiableList() 或 List.of() 返回的实例)。
示例:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));
Collections.reverse(list);
System.out.println(list); // [d, c, b, a]
二、注意事项:必须是可修改的 List
以下情况会抛出异常或无效:
立即学习“Java免费学习笔记(深入)”;
- 传入
null→ 抛出NullPointerException - 传入
Collections.unmodifiableList(...)→ 抛出UnsupportedOperationException - 传入
List.of("x", "y")(Java 9+ 不可变列表)→ 同样抛出UnsupportedOperationException - 传入数组(如
String[])→ 编译不通过,类型不匹配
三、如果需要保留原列表,先复制再反转
因为 reverse() 是原地操作,若需同时保留正序和逆序版本,应先克隆列表:
List<Integer> original = Arrays.asList(1, 2, 3, 4); List<Integer> reversed = new ArrayList<>(original); // 复制 Collections.reverse(reversed); // original 仍是 [1, 2, 3, 4],reversed 是 [4, 3, 2, 1]
四、替代方案对比(何时不用 reverse())
虽然 Collections.reverse() 最简洁,但某些场景有更优选择:
- 只需遍历时倒序 → 用传统 for 循环从后往前迭代,避免修改原数据
- 处理流式数据或需链式调用 → 用
Stream.iterate()或Lists.reverse()(Guava) - 频繁反转 + 随机访问 → 考虑封装为“反向视图”(如
Collections.unmodifiableList()包装反转逻辑),避免重复拷贝


















