怎么通过 Arrays.fill() 为大批量数组变量快速初始化默认值以替代冗长的 for 循环
作者:BrightSoul
时间:2026-07-08
浏览:2
Arrays.fill()可快速初始化数组,支持全数组或指定范围填充,代码简洁且性能优于手动循环。多维数组需逐层调用,对象数组填充的是引用副本而非独立实例,基本类型数组覆盖所有类型,调用前需判空。
本文目录
在Ja va日常开发中,给数组批量赋值是一个非常基础但又频繁出现的操作。最直接的反应可能是写一个for循环逐位填充,但标准库其实提供了一个更简洁、更高效的工具——`Arrays.fill()`。它不仅让代码更易读,底层还经过了优化(比如利用native实现或内存块拷贝),性能上往往优于手动循环。那么,这个工具具体怎么用?有哪些需要注意的细节?我们逐一拆解。
---
### 基础用法:一次性填满整个数组
适用于一维基本类型数组或对象数组,只需指定数组和统一填充值即可:
```ja va
int[] arr = new int[1000];
Arrays.fill(arr, -1); // 所有元素设为 -1
String[] strs = new String[500];
Arrays.fill(strs, "N/A"); // 每个位置赋值 "N/A"
boolean[] flags = new boolean[10000];
Arrays.fill(flags, true); // 全设为 true
```
代码干净利落,一眼就能看出意图,比手写for循环少写不少括号和索引。
---
### 精准控制范围:只填充子区间,避免误操作
很多时候并不需要填满整个数组,比如只想重置中间一段数据、或者跳过首尾保留已有内容。这时可以用三参数的重载版本:
```ja va
Arrays.fill(arr, 10, 50, 0); // 从索引10(含)到50(不含),共40个位置填0
```
需要注意的是,`toIndex`如果超出数组长度会直接抛出`IndexOutOfBoundsException`。稳妥的做法是在调用前做边界校验,或者用`Math.min(toIndex, arr.length)`兜底。这个场景在实际中很常见,比如清空缓存区的某一段、或者重置滑动窗口内的数据。
---
### 多维数组需逐层调用(不能直接 fill 二维)
Ja va没有提供一个`fill`方法直接处理二维数组。但可以通过循环配合`fill`高效实现:
```ja va
int[][] matrix = new int[100][200];
for (int[] row : matrix) {
Arrays.fill(row, 7);
}
```
这比嵌套两层for循环少写内层索引逻辑,语义也更清晰,JVM也更容易优化。如果希望不同行填充不同的值,在循环内动态传参即可,比如`Arrays.fill(row, i * 10);`。
---
### 注意事项与避坑点
虽然`Arrays.fill`用起来很顺手,但有几个细节容易踩坑,提前留个心眼:
- **对象数组填充的是引用副本**,而不是创建新对象。比如:
```ja va
Date[] dates = new Date[10];
Arrays.fill(dates, new Date());
```
最后数组里每一个元素都指向**同一个**`Date`实例。如果你希望每个位置都是独立的对象,那就老老实实用for循环逐次new。
- 对`null`数组调用`fill`会直接抛出`NullPointerException`,建议调用前先做判空检查。
- 基本类型数组覆盖所有数值类型(`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`),而且不需要额外导入任何包,直接使用即可。
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com

作者最新文章
漫蛙manwa2在线阅读入口
2026-10-13 13:49
漫蛙漫画app下载安装包
2026-10-13 13:19
漫蛙MANWA2官方入口
2026-10-13 13:18
manwa漫蛙APP下载最新版本
2026-10-13 13:17
漫蛙漫画官方网页版app下载
2026-10-13 13:16
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多










































