二维数组map[][]的初始化为某一个相同的值,除了用双重循环赋初值,还可以用Arrays.fill()填充
Tips: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);//失败
但是,换位思考,其实二维数组,就是一维数组嵌套着多个一维数组而已,即一维数组中的每个元素都是一维数组。
既然这是一维数组,那我们可以使用以下方法进行赋初值。
import java.util.Arrays;
import java.util.stream.Stream;
public class Test {
public static void main(String[] args) {
int[][] map=new int[4][5];
int[] ten=new int[10]; //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
System.out.println(Arrays.toString(ten));
Arrays.fill(ten, -1); // [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
Arrays.fill(map,ten); //成功
//将ten这个一维数组赋值给二维数组map后,map的列数由原来的 5 ==> ten.length 即 10
// 打印二维数组
System.out.println(Arrays.toString(ten));
for (int[] array : map) {
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
/*-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1*/
// 第二种打印数组的方法
Arrays.stream(map).flatMap(c -> Stream.of(c)).map(c -> Arrays.toString(c))
.forEach(System.out::println);
}
}
一维数组 ten 也可以是变值
import java.util.Arrays;
import java.util.stream.Stream;
public class Test {
public static void main(String[] args) {
int[][] map=new int[4][5];
int[] ten={1,2,6,3,6,1,7};
Arrays.fill(map,ten); //成功
/*1 2 6 3 6 1 7
1 2 6 3 6 1 7
1 2 6 3 6 1 7
1 2 6 3 6 1 7*/
}
}