欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-14 17:14:52
...

目录

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.

参考

相关标签: Java