collections.fill() 用指定元素原地覆盖 list 所有位置,要求 list 可修改;不可变列表(如 list.of())会抛 unsupportedoperationexception;时间复杂度 o(n),不改变列表大小。

Collections.fill() 是 Java 集合工具类中的一个静态方法,用于**用指定的元素替换列表(List)中所有位置的元素**。它不会改变列表大小,也不会添加或删除元素,只做“原地覆盖”操作。
使用前提:必须传入可修改的 List
该方法要求传入的 List 必须是可修改的(即支持 set() 操作)。常见不可用情况包括:
- 由
Arrays.asList()创建的列表(底层是固定大小数组,但支持 set)→ ✅ 可用 - 由
List.of()或Arrays.asList().toList()创建的不可变列表 → ❌ 抛出UnsupportedOperationException - 通过
Collections.unmodifiableList()包装的列表 → ❌ 同样抛异常
基本语法和示例
方法签名:
public static <t> void fill(List super T> list, T obj)</t>
示例代码:
List<string> list = new ArrayList(Arrays.asList("a", "b", "c"));
Collections.fill(list, "X");
// 结果:["X", "X", "X"]</string>
注意:list 必须已初始化且有元素(长度 > 0),否则填完仍是空列表(没位置可填)。
常见注意事项
-
类型安全:泛型确保填入元素类型与列表元素类型兼容(如往
List<number></number>填Integer没问题,填String编译报错) -
null 安全:可以填
null,只要列表本身允许存 null(如ArrayList允许,某些自定义 List 可能不允许) -
性能高效:内部通过循环调用
list.set(i, obj),时间复杂度 O(n),无额外空间开销 -
不适用于数组:别和
Arrays.fill()混淆 —— 后者用于普通数组,前者只用于List
替代写法(不推荐,仅作对比)
不用 Collections.fill() 的等效手动写法:
for (int i = 0; i <p>功能一致,但 <code>Collections.fill()</code> 更简洁、语义更明确,且经过充分测试。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











