Java_Arrays.fill() 初始化二维数组一个指定值
程序员文章站
2024-02-14 17:14:52
...
目录
Fill说明
首先说明,Arrays.fill()并不能提高赋值的效率,在函数的内部也是用for循环的方式 实现的。
一种声明举例:
public static void fill(int[] a, form, to, int var)
参数:
a--数组
form--替换开始位置(包括)
to--替换结束位置(不包括)
var--要替换的值
fill()函数源码的一种:
public static void fill(Object[] a, Object val) {
for (int i = 0, len = a.length; i < len; i++)
a[i] = val;
}
二维数组赋值
for (int i = 0; i <= n; i++) {
Arrays.fill(f[i], Integer.MAX_VALUE);
}
等价于
for (int i = 0; i <= n; i++) {
for(int j =0 ;j<=m;j++){
f[i][j] = Integer.MAX_VALUE;
}
}
用例1
public class Test {
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,6};
System.out.println(Arrays.toString(a)); //{1,2,3,4,5,6}
Arrays.fill(a, 0);
System.out.println(Arrays.toString(a)); //{0,0,0,0,0,0}
int[] b = new int[]{1,2,3,4,5,6};
Arrays.fill(b, 2, 4, 0);
System.out.println(Arrays.toString(b)); //{1,2,0,0,5,6}
Boolean[] c = {true,false};
System.out.println(Arrays.toString(c)); //{true,false}
Arrays.fill(c, false);
System.out.println(Arrays.toString(c)); //{false,false}
Arrays.fill(c, 0, 1, true);
System.out.println(Arrays.toString(c)); //{true,false}
String[] d = {"a","b","c","d","e","f"};
System.out.println(Arrays.toString(d)); //{a,b,c,d,e,f}
Arrays.fill(d, 1, 2, "HelloWorld");
System.out.println(Arrays.toString(d)); //{a,HelloWorld,c,d,e,f}
}
}
用例2
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
int[] a = new int[5];
Arrays.fill(a, 1);
System.out.println(Arrays.toString(a));
}
}
特别用例
由此可见fill()函数只能填充一维数组,如果这样用,肯定会失败的。
int[][] map=new int[4][5];
Arrays.fill(map,-1);//失败
但是可以换一种方法实现,二维数组其实就是一维数组的数组,即,它本身只是一个一维数组,但是数组中的每个变量也是一个一维数组。
所以既然它是一维数组,就可以用对应类型的变量来填充它,即用一个一维数组来填充它:
int[][] map=new int[4][5];
int[] ten=new int[10];
Arrays.fill(ten, -1);
Arrays.fill(map,ten); //成功
这里值得注意的是,一旦用ten填充了map,那map声明时候的长度“5”将起不到任何作用,每个map[i]都将等于ten。
虽然成功填充了二维数组,但是感觉好像把问题变得更复杂了,可能并不如直接用for循环实现简单。
特别注意
int[][] map=new int[4][5];
int[] ten={1,2,6,3,6,1,7};
Arrays.fill(map,ten);
当ten中的数值不固定,也不一定有规律时,可以用Arrays.fill()来填充二维数组,使其每一行都是{1,2,6,3,6,1,7}
但是用以上方法给二维数组赋值是特别注意:map的每一项指向的都是同一个一维数组ten。修改一个会影响其他地址的值 ,修改map[0][1] = 100 ,则 map[1][1] map[2][1]等都是100.