Arrays.fill是Java中重置数组最直接高效的方式,不创建新数组而只修改原内容,适用于一维全量/区间重置、多维逐层填充及对象数组安全设值,但填new对象时需避免引用共享。

Arrays.fill 是 Java 中重置数组数据最直接、高效的方式——不创建新数组,只修改原内容,一行代码就能替代冗长循环。它适合显式设定业务语义明确的初始值,比如用 -1 表示“未计算”,false 表示“未校验”,"N/A" 表示“暂无数据”。
一维数组全量重置:简洁安全,覆盖所有类型
新建或复用数组时,统一设值最常用也最稳妥:
- 基本类型填非零默认值:int[] buf = new int[5000]; Arrays.fill(buf, -1); —— JVM 可能触发 intrinsic 优化,比 for 循环更快
- 布尔数组显式开关:boolean[] visited = new boolean[1000]; Arrays.fill(visited, false);
- 引用类型填字面量或 null:String[] names = new String[20]; Arrays.fill(names, "N/A"); 或 Arrays.fill(names, null);
局部区间重置:精准控制,避免越界风险
只需重置某一段(如滑动窗口、DP 前缀、缓存头部),用三参数版本更可靠:
- 语法为 Arrays.fill(array, fromIndex, toIndex, value),区间左闭右开,toIndex 可等于 array.length
- 常见写法:Arrays.fill(dp, 0, k, Integer.MAX_VALUE) 预设前 k 个无效状态;Arrays.fill(data, 100, data.length, 0) 安全清空后段
- 务必确保:fromIndex ≥ 0、toIndex ≤ array.length、fromIndex ≤ toIndex,否则抛 ArrayIndexOutOfBoundsException
多维数组逐层填充:不能跳过循环,但结构清晰
Java 二维数组本质是“一维引用数组”,Arrays.fill 无法自动展开数据层,必须手动遍历:
立即学习“Java免费学习笔记(深入)”;
- 每行填相同值:for (int[] row : matrix) Arrays.fill(row, 0);
- 每行填不同值:for (int i = 0; i < matrix.length; i++) Arrays.fill(matrix[i], i * 10);
- 禁止写法:Arrays.fill(matrix, new int[]{0,0}) —— 这会让所有行指向同一数组对象,改一个全变
对象数组重置:警惕引用共享,区分安全与危险场景
Arrays.fill 对象数组时填的是引用,不是新实例,这点必须清楚:
- 填字面量或不可变对象安全:Arrays.fill(strs, "N/A")、Arrays.fill(flags, null)、Arrays.fill(bools, true)
- 填 new 对象危险:Arrays.fill(users, new User()) → 所有元素指向同一实例,后续修改会互相干扰
- 需独立对象时,必须循环创建:for (int i = 0; i < users.length; i++) users[i] = new User();


















