Collections.shuffle()用于随机打乱List集合元素顺序,如ArrayList或LinkedList,示例中调用Collections.shuffle(list)可将[A, B, C, D]重排为[C, A, D, B];支持传入Random实例实现可控随机,如Collections.shuffle(list, new Random(42))保证结果可复现;该方法仅适用于List,不适用于Set或Map,且为原地操作,直接修改原列表,空或单元素列表调用无效果,常用于抽题、卡牌洗牌和推荐内容随机展示等场景。

在Java中,Collections.shuffle() 是用来随机打乱集合元素顺序的便捷方法。它属于 java.util.Collections 工具类,适用于任何实现了 List 接口的集合(如 ArrayList、LinkedList 等)。
基本用法
调用 Collections.shuffle(list) 可以将列表中的元素随机重排。该方法使用默认的随机源进行洗牌。
示例代码:
Listlist.add("A");
list.add("B");
list.add("C");
list.add("D");
System.out.println("打乱前: " + list);
Collections.shuffle(list);
System.out.println("打乱后: " + list);
输出结果类似:
打乱前: [A, B, C, D]
打乱后: [C, A, D, B]
使用自定义随机数生成器
如果你希望控制随机过程(例如用于测试或复现结果),可以传入一个 Random 实例作为参数:
立即学习“Java免费学习笔记(深入)”;
Collections.shuffle(list, new Random(42)); // 使用固定种子这样每次运行程序时,只要种子相同,打乱的结果也会一致,便于调试和测试。
注意事项
只适用于List:该方法只能用于 List 类型的集合。Set、Map 等不保证有序的集合类型无法直接使用,即使使用也无法体现“顺序变化”。
原地操作:shuffle 方法会直接修改原始列表,不会创建新集合。如果需要保留原顺序,应先复制列表。
空集合或单元素集合:对长度小于2的列表调用 shuffle 不会产生任何效果,也不会报错。
实际应用场景
- 实现抽题系统时随机排列题目顺序
- 卡牌游戏中洗牌
- 推荐内容的随机展示
基本上就这些。只要记住它作用于 List,是原地修改,且依赖随机性就够了。不复杂但容易忽略细节。










