Arrays.fill 是 Java 中用于批量设置数组元素为指定值的工具方法,支持基本类型和对象数组的全数组或范围填充,不创建新数组,需注意多维数组需逐层调用及与 Arrays.setAll 的适用场景差异。

Arrays.fill 是 Java 中用于批量设置数组所有(或部分)元素为指定值的便捷工具方法,定义在 java.util.Arrays 类中。它不创建新数组,而是直接修改原数组内容,支持基本类型数组和对象数组,并提供多种重载形式以满足不同范围填充需求。
按索引范围填充(推荐用于局部赋值)
当只需修改数组某一段时,使用带起始和结束索引的重载最安全高效:
-
Arrays.fill(int[] a, int fromIndex, int toIndex, int val):填充[fromIndex, toIndex)区间(左闭右开),toIndex可等于数组长度 - 越界检查严格:若
fromIndex < 0、toIndex > a.length或fromIndex > toIndex,抛出IllegalArgumentException - 示例:
int[] arr = {1,2,3,4,5}; Arrays.fill(arr, 1, 4, 0);→ 结果为{1,0,0,0,5}
全数组填充(最常用场景)
对整个数组统一赋值,写法简洁,适合初始化或重置:
- 对应每种基本类型都有专属重载,如
Arrays.fill(boolean[] a, boolean val)、Arrays.fill(double[] a, double val) - 对象数组使用
Arrays.fill(Object[] a, Object val),注意传入null会将所有元素设为null - 内部实现是简单循环,无额外开销,性能接近手写 for 循环
多维数组需逐层调用(不能直接填充嵌套结构)
Arrays.fill 不支持二维及以上数组的“深层”填充,但可配合循环使用:
立即学习“Java免费学习笔记(深入)”;
- 二维数组每行单独 fill:
for (int[] row : matrix) Arrays.fill(row, -1); - 若需填充为同一引用对象(如 new ArrayList<>()),必须每个位置单独 new,否则所有行指向同一实例
- 不可写作
Arrays.fill(matrix, new int[]{0,0});——这只会把每行引用设为同一个一维数组对象
与 Arrays.setAll 的关键区别
如果填充逻辑依赖索引或需动态计算值,Arrays.setAll 更合适:
-
Arrays.fill只能填固定值;Arrays.setAll接收IntUnaryOperator,例如:Arrays.setAll(arr, i -> i * i) - 对象数组中,
fill复用同一对象引用;setAll可每次 new 新实例,避免共享状态问题 - 二者均不适用于基本类型包装类数组(如
Integer[]),但setAll在函数式场景下更灵活


















