arrays.fill 是 java 标准库中高效批量填充数组的工具,支持基本类型与对象数组、指定范围填充,性能优于 for 循环,但需注意对象引用共享、多维数组限制等细节。

Java 中数组初始化不一定要逐个赋值,Arrays.fill 是标准库提供的轻量、高效批量填充工具,适合构建同值数组或预设默认状态。
Arrays.fill 的核心用法
它支持基本类型和对象数组,底层基于本地方法(native),比 for 循环更快,且代码更简洁:
-
基本类型数组:如
int[] arr = new int[5]; Arrays.fill(arr, 42);→ 全填 42 -
对象数组:如
String[] strs = new String[3]; Arrays.fill(strs, "N/A");→ 每个元素指向同一字符串实例(注意引用共享) -
指定范围填充:
Arrays.fill(arr, fromIndex, toIndex, value),区间左闭右开,适合局部重置
对比手动循环:性能与可读性优势
对 10 万元素的 int 数组测试,Arrays.fill 平均耗时约 0.02ms,传统 for 循环约 0.05ms——差异虽小,但在高频初始化场景(如缓存预热、批量 DTO 构建)中累积效应明显。更重要的是,代码意图一目了然,避免手误写错边界条件。
常见误区与注意事项
-
对象数组慎用 null 填充:若后续需调用方法,应确保已初始化,或改用
Arrays.setAll配合 lambda 构造新实例 -
不可用于多维数组整体填充:
Arrays.fill(matrix, new int[]{0,0})只会让所有行引用同一个子数组;需嵌套调用或用Arrays.stream(matrix).forEach(row -> Arrays.fill(row, 0)) -
原始类型数组无 null 概念:如
boolean[]填false、int[]填0是安全的默认值,无需额外判空
实战小技巧:结合其他工具快速构建数据
单靠 Arrays.fill 能解决“同值”需求,但常需组合使用:
- 先
Arrays.fill设默认值,再单独修改个别位置(如标记特殊索引) - 配合
Random.nextInt()实现随机范围填充:Arrays.setAll(arr, i -> rand.nextInt(100))(注意这是替代 fill 的灵活方案) - 初始化后立即转为不可变视图:如
List<integer> list = Arrays.asList(new Integer[]{...})</integer>,再用Collections.unmodifiableList
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











