collections 提供 reverse、shuffle 和 unmodifiablelist 三个静态方法:reverse 就地反转 list 顺序;shuffle 用 fisher-yates 算法随机打乱;unmodifiablelist 返回只读代理视图,修改即抛异常。

Collections 是 Java 中操作集合的实用工具类,提供了多个静态方法来简化 List 的常见操作。下面介绍如何用它实现反转、随机洗牌和创建不可变包装。
反转 List 顺序(reverse)
调用 Collections.reverse(list) 可直接将原 List 元素顺序倒置。该操作是就地修改,不返回新列表,原列表内容会被改变。
- 要求传入的 List 必须是可修改的(如
ArrayList、LinkedList),否则抛出UnsupportedOperationException - 空列表或单元素列表调用后无变化
- 示例:Collections.reverse(myList); —— 执行后
myList从[1,2,3]变为[3,2,1]
随机打乱 List(shuffle)
Collections.shuffle(list) 使用默认随机源对 List 进行随机排序,同样为就地操作。
- 底层基于 Fisher-Yates 洗牌算法,保证各排列等概率出现
- 也要求 List 支持随机访问(如
ArrayList效率高;LinkedList会自动转为数组处理,稍慢但可用) - 如需可重现的随机结果,可传入自定义
Random实例:Collections.shuffle(myList, new Random(42));
生成不可变 List 包装(unmodifiableList)
Collections.unmodifiableList(list) 返回一个“只读视图”,任何修改操作(如 add、set、clear)都会立即抛出 UnsupportedOperationException。
- 返回的是原 List 的代理对象,不是副本;若原 List 被外部修改,不可变视图仍会反映这些变化
- 若需真正不可变(即内容也不被修改),应确保原 List 本身不再被其他引用修改,或使用
List.copyOf()(Java 10+)或Arrays.asList().copyOf()配合不可变包装 - 典型用法:List
safeList = Collections.unmodifiableList(new ArrayList(original));
这三个操作都无需额外依赖,属于 JDK 原生能力,注意它们均作用于已有 List 实例,且多数不生成新集合对象。











