arrays.fill 是 java 中重置数组最直接高效的方式,不创建新数组只修改原内容,支持全数组填充、区间填充、多维数组逐层处理及对象数组引用填充,但需警惕对象引用共享问题。

Arrays.fill 是 Java 中重置数组最直接、最高效的方式,不创建新数组,只修改原内容。一行代码就能完成原本需要循环十几次的操作,语义清晰、性能可靠,特别适合初始化或复用前清空状态。
全数组填充:统一设值,简洁安全
新建数组后快速赋予统一初始值,是最常见的使用场景。JVM 对基本类型(如 int、boolean、byte)的 fill 操作常优化为底层内存块拷贝,比手写 for 循环更快。
- 数值占位:int[] buf = new int[10000]; Arrays.fill(buf, -1); —— 表示“未计算”或“无效”状态
- 布尔开关:boolean[] visited = new boolean[5000]; Arrays.fill(visited, false); —— 显式关闭,意图明确
- 字符串占位:String[] names = new String[200]; Arrays.fill(names, "N/A"); —— 填字面量安全,所有元素共享同一不可变引用
- 对象数组填 null 或常量:User[] users = new User[100]; Arrays.fill(users, null); 或 Arrays.fill(users, User.EMPTY);
区间填充:精准控制,避免误操作
只需重置某一段(如滑动窗口、DP 数组前缀、缓存头部),用三参数版本更稳妥。语法为 Arrays.fill(array, fromIndex, toIndex, value),区间左闭右开,即包含 fromIndex,不包含 toIndex。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 清零后段:Arrays.fill(data, 100, data.length, 0);
- 预设 DP 无效状态:int[] dp = new int[100]; Arrays.fill(dp, 0, 10, Integer.MAX_VALUE);
- 务必校验索引:fromIndex ≥ 0、toIndex ≤ array.length、fromIndex ≤ toIndex,否则抛 IllegalArgumentException
多维数组处理:逐层调用,不可跳过
Java 不支持二维数组一键填充全部元素。Arrays.fill 无法自动展开嵌套结构,必须手动遍历每一维。
- 规则矩阵每行同值:for (int[] row : matrix) Arrays.fill(row, 0);
- 每行不同值:for (int i = 0; i
- 禁止写法:Arrays.fill(matrix, new int[]{0, 0}) —— 这会让所有行指向同一个一维数组对象
对象数组陷阱:警惕引用共享
Arrays.fill 对象数组时,填的是引用,不是新实例。这点必须明确,否则极易引发逻辑错误。
- 填字面量或 null 安全:Arrays.fill(strs, "");、Arrays.fill(users, null);
- 填 new 对象危险:Arrays.fill(objArr, new Date()); → 所有元素指向同一实例,改一个全变
- 需独立对象时,必须循环创建:for (int i = 0; i
- Boolean[] 填 true/false 安全(复用 Boolean.TRUE/FALSE 常量),但填 new Boolean(true) 仍属错误写法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










