Java_Arrays.fill() 初始化二维数组一个指定值

目录

Fill说明

一种声明举例:

参数:

fill()函数源码的一种:

二维数组赋值

用例1

用例2

特别用例

         特别注意

参考


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.

参考

猜你喜欢

转载自blog.csdn.net/shyjhyp11/article/details/112801487