Arrays.fill() 是 Java 中高效填充数组的首选方法,支持全数组或指定区间填充基本类型和引用类型,但需注意引用类型共享对象、多维数组需嵌套调用,且不适用于生成不同值或不可变集合。

Java 中用 Arrays.fill() 快速填充数组是最直接、高效的方式,尤其适合构建全为同一值的序列(如初始化默认值、标记数组、生成测试数据等)。
基础用法:一次性填满整个数组
适用于一维基本类型或引用类型数组,语法简洁,无需循环:
- 对 int 数组填充 0:
int[] arr = new int[5]; Arrays.fill(arr, 0);→[0, 0, 0, 0, 0] - 对 String 数组填充 "N/A":
String[] tags = new String[3]; Arrays.fill(tags, "N/A");→["N/A", "N/A", "N/A"] - 注意:引用类型数组中填入的是同一对象引用,修改其中一个元素会影响所有位置(若该对象可变)
区间填充:只改指定范围,灵活控制起止索引
通过重载方法 Arrays.fill(array, fromIndex, toIndex, value) 精确操作子区间:
-
int[] a = {1,2,3,4,5}; Arrays.fill(a, 1, 4, 9);→[1, 9, 9, 9, 5](索引 1 到 3 被覆盖) -
fromIndex包含,toIndex排除,且必须满足0 ≤ fromIndex ≤ toIndex ≤ array.length,否则抛IllegalArgumentException - 常用于局部重置、分段初始化,比如处理滑动窗口中间区域
多维数组需逐层调用,不能直接“一键全填”
Arrays.fill() 不支持自动递归填充二维及以上数组,但可通过嵌套调用实现:
立即学习“Java免费学习笔记(深入)”;
- 二维 int 数组全填 -1:
int[][] grid = new int[3][4];<br>for (int[] row : grid) Arrays.fill(row, -1);
- 二维 String 数组填空字符串:
String[][] table = new String[2][3];<br>for (String[] row : table) Arrays.fill(row, "");
- 避免误用
Arrays.fill(table, new String[3])—— 这只会让所有行引用同一个数组对象
替代方案对比:什么时候不该用 fill?
虽然方便,但不是万能解。以下情况建议换方式:
- 需要填充**不同值**(如递增序列、随机数、计算结果)→ 用 for 循环或
IntStream.range().mapToObj() - 构建**不可变集合**(如 List)→ 用
Collections.nCopies(n, value)或List.of()(Java 14+) - 大量重复创建同值数组 → 可缓存已填好数组,避免频繁调用 fill


















