Collections.nCopies用于创建包含n个相同元素引用的不可变列表,所有元素共享同一实例,适用于初始化默认值;若需可变集合,应通过ArrayList等构造函数复制结果,并注意避免可变对象的副作用。

在Java中,Collections.nCopies 是一个便捷的工具方法,用于快速生成包含重复元素的不可变集合。它常用于初始化具有相同值的多个元素,避免手动循环添加。
方法基本用法
Collections.nCopies(int n, T o) 接收两个参数:
- n:要复制的元素个数
- o:被复制的元素对象
返回一个由n个指定对象引用组成的不可变List。注意,所有元素都指向同一个对象实例,因此修改该对象会影响所有“副本”(仅适用于可变对象)。
示例代码:
立即学习“Java免费学习笔记(深入)”;
List
System.out.println(strings); // 输出:[Hello, Hello, Hello, Hello, Hello]
创建可变集合的正确方式
由于 nCopies 返回的是不可变列表,不能直接添加或删除元素。如需可变集合,应将其作为构造函数参数传入 ArrayList 或 LinkedList:
List
numbers.set(1, 100); // 现在可以修改
这样就得到了一个长度为4、初始值均为0的可变列表。
注意事项与使用建议
使用 nCopies 时需注意以下几点:
- 返回的List是不可变的,调用 add、remove、set 等方法会抛出 UnsupportedOperationException
- 所有元素是同一对象的引用,若对象可变(如自定义类实例),修改一个即影响全部
- 适合用于填充不可变默认值,如空字符串、0、null 等基础类型包装类
- 不适用于需要独立对象实例的场景,此时应使用循环或 Stream 生成
基本上就这些。合理使用 Collections.nCopies 能让代码更简洁,但要注意其不可变性和引用共享特性。










