Arrays.fill是Java中高效原地重置数组的首选方法,支持全数组、局部区间、多维及对象数组的语义化填充,底层优化性能优,但需注意空指针和索引越界异常。

Arrays.fill 是 Java 中重置数组数据最直接、高效的方式,特别适合数据清洗中频繁清空缓存、复用标记数组或批量重设状态的场景。它不创建新数组,只原地修改内容,语义清晰、性能稳定,一行代码就能替代冗长循环。
全数组重置:初始化与批量清零
新建数组后统一设默认值,或清洗前整体“归零”,用最简重载即可:
- 基本类型安全高效:int[] buf = new int[10000]; Arrays.fill(buf, 0); —— 所有元素立刻为 0;填 -1 表示“未计算”,填 1 表示“已命中”,语义明确
- 布尔/字节等全覆盖:Arrays.fill(flags, false) 清空标记位;Arrays.fill(bytes, (byte) 0) 彻底清零字节数组,无需类型强转
- 字符串占位安全:String[] names = new String[10]; Arrays.fill(names, ""); 或填 "N/A",字面量不可变,无共享风险
局部区间重置:精准干预清洗片段
数据清洗常需重置某一段(如滑动窗口内脏数据、日志缓冲区头部、统计数组某段异常值),三参数版本更可控:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 语法是 Arrays.fill(array, fromIndex, toIndex, value),区间为左闭右开 [fromIndex, toIndex)
- toIndex 可等于数组长度:Arrays.fill(data, 50, data.length, 0) 安全清空后半段
- 典型用途:清除缓存中最近 10 条无效记录 Arrays.fill(cache, cache.length - 10, cache.length, null);动态规划中预设前 k 个无效状态 Arrays.fill(dp, 0, k, Integer.MAX_VALUE)
多维与对象数组:避免浅拷贝陷阱
二维数组不是“一块内存”,而是引用数组;对象数组填的是地址,不是新实例——这两点极易引发数据污染:
立即学习“Java免费学习笔记(深入)”;
- 二维数组必须逐行调用:for (int[] row : matrix) Arrays.fill(row, 0); 不能写 Arrays.fill(matrix, new int[]{0,0}),否则所有行指向同一数组
- 对象数组填 null 或不可变对象安全:Arrays.fill(users, null)、Arrays.fill(labels, "UNKNOWN")
- 需独立可变对象时,fill 不适用:List
[] lists = new ArrayList[3]; 必须用循环 new 实例,否则 add 元素会互相覆盖
性能与边界提醒
Arrays.fill 底层由 JVM 优化为接近 memset 的内存操作,大数组下比手写 for 略快;但日常使用中优势在于可读性——“我要把这一片全设成这个值”意图一目了然:
- 数组必须非 null,否则抛 NullPointerException
- 索引越界(fromIndex array.length、fromIndex > toIndex)直接抛 IllegalArgumentException,无需额外校验
- 不适用于需要按索引动态计算值的场景,此时应选 Arrays.setAll(i -> compute(i))

















