collections.ncopies 返回不可变的重复元素列表,底层共享引用;n≥0,支持null;修改抛unsupportedoperationexception;可变需求需转arraylist等;注意可变对象会共享实例。

Collections.nCopies 是 Java 集合工具类中的一个静态方法,用于快速创建一个**不可变的、包含 n 个相同元素的列表**。它返回的是 List<t></t> 类型,底层是优化过的只读实现,不占用额外内存来存储重复元素(内部用共享引用+计数方式实现)。
核心用法:生成固定长度的重复元素列表
语法很简单:
Collections.nCopies(int n, T element)
参数说明:
- n:要重复的次数(必须 ≥ 0;若为 0,返回空列表)
- element:要重复的元素(可以是 null)
例如:
List<string> threeOnes = Collections.nCopies(3, "1"); // ["1", "1", "1"]</string>
注意:返回的是不可变列表
该方法返回的 List 是只读的——任何修改操作(如 add()、set()、clear())都会抛出 UnsupportedOperationException。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
如果需要可变集合,得基于它构造新集合:
- 转成
ArrayList:new ArrayList(Collections.nCopies(5, 0)) - 转成数组:
Collections.nCopies(4, "x").toArray(new String[0]) - 用于初始化其他集合:
Set<string> set = new HashSet(Collections.nCopies(3, "a"))</string>
常见用途场景
这个方法常用于:
- 批量初始化默认值(比如创建含 10 个
false的布尔列表) - 测试时快速构造固定结构的数据
- 配合
Arrays.asList()或流式操作做占位或填充 - 作为函数式编程中“重复 n 次”的轻量替代(比循环简洁)
小陷阱提醒
当重复的是**可变对象**(如自定义类、List、Map 等)时,所有位置都指向同一个实例:
List<list>> lists = Collections.nCopies(3, new ArrayList());</list>
此时修改 lists.get(0).add(1),会同时影响 lists.get(1) 和 lists.get(2),因为它们共用同一个 ArrayList 实例。如需独立副本,应手动循环创建。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










