Java_Arrays.fill()初始化⼆维数组⼀个指定值⽬录
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.String(a));  //{1,2,3,4,5,6}
Arrays.fill(a, 0);
System.out.String(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.String(b));  //{1,2,0,0,5,6}
java定义一维数组并赋值
Boolean[] c = {true,false};
System.out.String(c));  //{true,false}
Arrays.fill(c, false);
System.out.String(c));  //{false,false}
Arrays.fill(c, 0, 1, true);
System.out.String(c));  //{true,false}
String[] d = {"a","b","c","d","e","f"};
System.out.String(d));  //{a,b,c,d,e,f}
Arrays.fill(d, 1, 2, "HelloWorld");
System.out.String(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.String(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.
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。