Collections.nCopies用于生成包含重复元素的不可变列表,参数n指定数量,o为被复制对象,返回List中所有元素共享同一引用,适用于String等不可变对象,常用于初始化默认值或测试数据,需注意不可修改集合结构且避免对可变对象使用以防共享状态问题。

在Java中,Collections.nCopies 是一个便捷的工具方法,用于快速生成包含重复元素的不可变集合。它常用于初始化具有相同值的多个元素,避免手动循环添加。
方法定义与基本用法
Collections.nCopies(int n, T o) 接收两个参数:
- n:要复制的元素个数
- o:被复制的对象(所有元素都指向该对象的引用)
返回一个由n个指定对象组成的不可变List,其中每个元素都是对传入对象o的引用。
示例:
立即学习“Java免费学习笔记(深入)”;
ListSystem.out.println(fiveNulls); // 输出 [DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT]
实际应用场景
这个方法在需要预填充集合时非常有用,比如:
- 初始化固定大小的默认值列表
- 配合 ArrayList 构造函数创建可变副本
- 测试中构造模拟数据
常见用法:
// 创建可修改的ArrayListList
list.set(0, "updated"); // 可以修改
注意事项与陷阱
使用 nCopies 需要注意以下几点:
- 返回的List是不可变的,调用add、set等会抛出UnsupportedOperationException
- 所有元素共享同一个引用,若对象是可变类型(如自定义对象),修改一个会影响全部
- 适用于不可变对象(如String、Integer)更安全
错误示例:
List- > bad = Collections.nCopies(3, new ArrayList
bad.get(0).add(1); // 所有三个位置都会看到这个添加操作










