arrays.fill()是java中为已创建数组批量赋值的最优工具,支持全数组填充、局部区间填充及多维数组逐层填充,语义清晰且安全高效。

Arrays.fill() 是 Java 中最直接、语义最清晰的数组批量赋值工具,不是万能的内存初始化器,但对已创建数组设统一值这件事,它几乎是最优解。
统一设默认值:新建数组后快速“上色”
新建数组时 JVM 会自动初始化基本类型为 0/false/’\u0000’,但显式填充更明确,尤其当目标值不是默认值时:
-
全填固定值:如
int[] buf = new int[1000]; Arrays.fill(buf, -1);表示“未计算”状态 -
布尔数组开关初始化:如
boolean[] visited = new boolean[500]; Arrays.fill(visited, false); -
字符串占位符:如
String[] names = new String[10]; Arrays.fill(names, "N/A");(填字面量安全)
精准重置局部区间:跳过头尾、填充滑动窗口
不用写循环边界判断,一行代码控制起止范围,索引规则与 substring 一致(含头不含尾):
- 只初始化前
n个:Arrays.fill(arr, 0, n, 0) - 清空中间一段缓存:
Arrays.fill(cache, offset, offset + len, 0) - 动态规划中预设无效状态:
Arrays.fill(dp, 0, k, Integer.MAX_VALUE)
注意:fromIndex 必须 ≥ 0,toIndex ≤ 数组长度,否则抛 ArrayIndexOutOfBoundsException;若 fromIndex == toIndex,不执行任何操作。
二维及多维数组:逐层调用,避免引用共享
Java 没有原生二维填充支持,但可结合增强 for 循环高效处理:
-
规则矩阵每行同值:
for (int[] row : matrix) Arrays.fill(row, 7); -
每行不同值:
for (int i = 0; i -
对象数组陷阱:
Arrays.fill(objArr, new Date())会让所有元素指向同一实例;需独立对象时必须循环创建或用Arrays.setAll()
对比其他方式:为什么 fill 更推荐
面对统一值填充需求,它比替代方案更稳、更轻、更易读:
-
vs 手动 for 循环:省去索引变量、边界条件、自增逻辑,杜绝
i++遗漏或越界错误 -
vs Stream.generate():无装箱开销、无流管道构建成本,JVM 对
fill有 native 层优化(如内存块拷贝) - vs 静态初始化:适用于运行时才确定长度的场景(如根据配置创建数组),无需硬编码元素个数
不复杂但容易忽略:它不分配内存、不处理堆外数据、不保证线程安全,用在对的地方,才真正高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











