arrays.fill支持局部填充,通过arrays.fill(array, fromindex, toindex, value)实现左闭右开区间赋值,适用于滑动窗口重置、dp数组初始化等场景,但对象数组需防引用共享。

Arrays.fill 方法本身不支持直接“局部填充”,但可以通过指定起始和结束索引实现对数组某一段范围的批量赋值——这是实际开发中高效初始化或重置子区间的常用技巧。
明确 fill 的局部填充语法
Java 中 Arrays.fill(array, fromIndex, toIndex, val) 是专为局部填充设计的重载方法:
- fromIndex:包含,即从该下标开始(含)
- toIndex:不包含,即到该下标前一个位置结束(不含)
- 要求
0 ≤ fromIndex ≤ toIndex ≤ array.length,否则抛IllegalArgumentException
常见局部填充场景与写法
不是所有填空都需全数组操作。以下是最典型的几类实战用法:
-
初始化后半段:如
int[] a = new int[10]; Arrays.fill(a, 5, 10, -1);→ 下标 5~9 全设为 -1 -
清空中间一段:如字符串数组临时复位
String[] tags = new String[8]; Arrays.fill(tags, 2, 6, null); - 替换指定区间值:已存在数据的数组,仅更新其中连续若干元素,避免循环逐个赋值
避开典型陷阱
看似简单的方法,实际容易踩坑:
-
索引边界易错:
toIndex是“排他性”的,写成Arrays.fill(a, 0, a.length, 0)才等价于全填零,而非a.length-1 -
引用类型要小心:对对象数组(如
Integer[])填充null安全;但若填新对象(如new Date()),所有位置将引用同一个实例,后续修改会相互影响 -
基本类型数组无装箱开销:
int[]、boolean[]等直接写入原始值,性能干净利落
对比手动循环:为什么推荐 fill
局部填充用 for 循环也能实现,但 Arrays.fill 更优:
- 语义清晰:
fill(..., 3, 7, 99)比for (int i = 3; i 更直白表达意图 - JVM 可能内联优化:底层常被 JIT 编译为高效内存块写入指令(尤其连续大范围)
- 减少出错概率:省去手写循环时常见的
误写、边界越界等低级错误
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











