arrays.fill()是java中高效初始化数组的方法,支持一维全量/区间填充、二维逐行填充及对象数组安全初始化,语义清晰且经jvm优化。

Arrays.fill() 是 Java 中初始化数组最直接高效的方式,一行代码就能完成原本需要循环十几次的操作,语义清晰、不易出错,且 JVM 通常做了底层优化。
一维数组全量初始化:简洁又安全
新建数组后立即填充统一值,是最常见也最推荐的用法:
- 基本类型直接填数值:
int[] scores = new int[100]; Arrays.fill(scores, 60);→ 全设为 60 - 布尔数组明确初始状态:
boolean[] enabled = new boolean[50]; Arrays.fill(enabled, false);→ 显式表达“全部未启用” - 字符串占位防 NPE:
String[] labels = new String[8]; Arrays.fill(labels, "—");→ 避免后续调用toString()或length()报空指针 - 浮点数用 NaN 表示缺失:
double[] values = new double[1000]; Arrays.fill(values, Double.NaN);
按需填充子区间:精准控制,避免误改
不是所有场景都需要重置整个数组,三参数版本支持左闭右开区间填充:
- 语法是
Arrays.fill(array, fromIndex, toIndex, value),其中toIndex不包含 - 例如:
int[] arr = new int[10]; Arrays.fill(arr, 2, 7, -1);→ 索引 2、3、4、5、6 位置变为 -1,其余仍为 0 - 常用于滑动窗口重置、DP 数组预设无效段(如
Arrays.fill(dp, 0, k, Integer.MAX_VALUE)) - 注意校验边界:确保
0 ≤ fromIndex ≤ toIndex ≤ array.length,否则抛IllegalArgumentException
二维数组逐行填充:绕过引用陷阱
Java 的二维数组本质是“一维数组的数组”,Arrays.fill(matrix, val) 会把同一引用塞进每一行,造成数据联动 —— 这是高频 bug 来源:
- ✅ 正确写法(每行独立):
for (int[] row : matrix) Arrays.fill(row, 0); - ✅ 每行不同值:
for (int i = 0; i - ❌ 危险写法:
Arrays.fill(matrix, new int[]{1, 2, 3});→ 所有行指向同一个一维数组 - 大矩阵可并行加速:
IntStream.range(0, matrix.length).parallel().forEach(i -> Arrays.fill(matrix[i], -1));
对象数组初始化:区分不可变与可变场景
填的是引用,不是副本,这点必须时刻牢记:
- 填不可变对象或字面量安全:
String[] names = new String[100]; Arrays.fill(names, "N/A");或Arrays.fill(names, null); - 填
new Boolean(true)或new ArrayList()危险:所有元素共享同一实例,改一个等于全改 - 需要独立对象时,必须循环创建:
for (int i = 0; i (); - Boolean[] 填
true/false安全(复用常量),但填new Boolean(true)绝对禁止
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











