Arrays.fill() 并不能提高赋值的效率,在函数的内部也是用 for 循环的方式实现的。
fill() 函数源码:
public static void fill(Object[] a, Object val) {
for (int i = 0, len = a.length; i < len; i++)
a[i] = val;
}
由此可见 fill() 函数只能填充一维数组,如果这样用,肯定会失败的。
int[][] map = new int[4][5];
Arrays.fill(map, -1); // 失败
但是可以换一种方法实现,二维数组其实就是一维数组的数组,也就是说,它本身是一个一维数组,但是数组中的每个变量也是一个一维数组。
所以既然它是一维数组,就可以用对应类型的变量来填充它,即用一个一维数组来填充它:
int[][] map = new int[4][5];
int[] temp = new int[10];
Arrays.fill(temp, -1);
Arrays.fill(map, temp); // 成功
这里值得注意的是,一旦用 temp 填充了 map,那 map 声明时候的 5 将起不到任何作用,每个 map[i] 都将等于 temp。
虽然成功填充了二维数组,但是感觉好像把问题变得更复杂了,可能并不如直接用 for 循环实现简单。