Arrays.fill()不支持多维数组局部填充,仅适用于一维数组;对二维数组需手动遍历目标行/列并逐行调用Arrays.fill()实现数值填充。

Java中Arrays.fill()本身不支持直接对多维数组的“子区间”(如某几行、某几列或矩形区域)进行局部填充,因为它只适用于一维数组。要实现多维数组的局部填充,需手动遍历目标范围并逐个赋值,或封装成工具方法。
理解Arrays.fill的局限性
Arrays.fill()重载方法均针对一维数组(包括基本类型和Object数组),例如:
Arrays.fill(int[] a, int fromIndex, int toIndex, int val)Arrays.fill(Object[] a, Object val)
对于二维数组(如int[][] matrix),它只是一个“一维对象数组”,每个元素是int[]。调用Arrays.fill(matrix, ...)只能填充某几行的引用(即让多行指向同一个数组),而非填充数值内容——这通常不是预期行为。
对二维数组某几行进行填充
若想把第rowStart到rowEnd-1行(含)全部设为指定值val,需对每一行单独调用Arrays.fill:
立即学习“Java免费学习笔记(深入)”;
int[][] matrix = new int[5][4];
int rowStart = 1, rowEnd = 4, val = 7;
for (int i = rowStart; i < rowEnd && i < matrix.length; i++) {
if (matrix[i] != null) {
Arrays.fill(matrix[i], val);
}
}
注意检查行是否为null,避免空指针异常;同时防止越界。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
对二维数组某几列进行填充
列不是连续内存,无法用Arrays.fill一键处理,必须逐行修改对应列下标:
int col = 2; // 填充第2列
int colStart = 0, colEnd = 3; // 行范围:第0~2行
for (int i = colStart; i < colEnd && i < matrix.length; i++) {
if (matrix[i] != null && col < matrix[i].length) {
matrix[i][col] = val;
}
}
也可封装为通用方法,支持任意列区间(如colStart到colEnd-1)。
填充矩形子区域(行+列范围)
这是最常见需求,例如将[r1,r2) × [c1,c2)区域设为同一值:
void fillSubmatrix(int[][] mat, int r1, int r2, int c1, int c2, int val) {
for (int i = Math.max(r1, 0); i < Math.min(r2, mat.length); i++) {
if (mat[i] == null) continue;
int len = Math.min(c2, mat[i].length);
for (int j = Math.max(c1, 0); j < len; j++) {
mat[i][j] = val;
}
}
}
该方法自动处理边界截断,安全可靠。调用示例:fillSubmatrix(matrix, 1, 3, 0, 2, 9) 填充第1、2行,第0、1列共4个元素。
不复杂但容易忽略边界检查和null判断,实际使用时建议封装成可复用的工具方法。

















