arrays.fill()是java中高效批量设置数组值的方法,支持一维全量/区间填充、二维逐行填充,语义清晰且避免引用共享问题。

Arrays.fill() 是 Java 中为已创建数组批量设统一值最直接、高效的方式。它不分配新数组,只修改原数组内容,语义清晰,一行代码就能完成初始化或重置操作。
一维数组全量填充:快速“上色”
新建数组后整体设默认值,比手动 for 循环简洁安全,JVM 对基本类型还可能做内存块拷贝优化。
- 数值型占位:int[] buf = new int[10000]; Arrays.fill(buf, -1); —— 表示“未计算”状态,比默认 0 更易区分有效值
- 布尔开关初始化:boolean[] visited = new boolean[5000]; Arrays.fill(visited, false); —— 显式表达初始未访问意图
- 字符串占位:String[] names = new String[200]; Arrays.fill(names, "N/A"); —— 填字面量安全,避免后续判空 NPE
区间精准填充:左闭右开,按需控制
只需初始化某一段(如滑动窗口、DP 前缀、缓存段),用三参数重载更精确,无需手写边界判断。
- 语法是 Arrays.fill(arr, fromIndex, toIndex, value),影响索引 fromIndex 到 toIndex−1
- 只初始化前 n 个:Arrays.fill(arr, 0, n, 0)
- 清空中间一段:Arrays.fill(cache, offset, offset + len, 0)
- 动态规划预设无效值:Arrays.fill(dp, 0, k, Integer.MAX_VALUE)
- 安全写法建议:Arrays.fill(arr, Math.min(0, arr.length), Math.min(toIndex, arr.length), v) 防越界
二维数组逐行填充:避开引用共享陷阱
Java 二维数组本质是“数组的数组”,直接 Arrays.fill(matrix, row) 会导致所有行指向同一对象,引发连锁修改 Bug。
- 正确做法:for (int[] row : matrix) Arrays.fill(row, 7); —— 比双重 for 快 20–30%,JIT 更易优化
- 若每行需不同值:for (int i = 0; i
- 填对象时务必注意:用 Arrays.fill(row, new ArrayList()) 会共享实例;需独立对象请用循环显式 new
对象数组与注意事项:浅拷贝不是深拷贝
Arrays.fill() 对象数组时只复制引用,不创建新对象。这点必须明确,否则容易引入隐蔽 Bug。
- 填不可变对象安全:如 Arrays.fill(strs, "OK")、Arrays.fill(flags, null)、Arrays.fill(bools, true)
- 填可变对象危险:如 Arrays.fill(lists, new ArrayList()) → 所有元素共用同一 List 实例
- 对 null 数组调用会抛 NullPointerException,使用前建议判空
- 索引参数必须合法:fromIndex ≥ 0,toIndex ≤ 数组长度,且 fromIndex ≤ toIndex
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











