博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 用Arrays.fill() 初始化 二维数组
阅读量:2116 次
发布时间:2019-04-30

本文共 1142 字,大约阅读时间需要 3 分钟。

在最短路径问题上遇到了一个问题,对于二维int数组 map[][],需要初始化为int的最大值,不想用双重循环赋初值,想用Arrays.fill()填充但是失败了。。。。。。

首先说明,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);//失败
但是可以换一种方法实现,二维数组其实就是一维数组的数组,即,它本身只是一个一维数组,但是数组中的每个变量也是一个一维数组。
所以既然它是一维数组,就可以用对应类型的变量来填充它,即用一个一维数组来填充它:

        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.

所以只能老老实实地用for循环赋值了

        int[][] map=new int[4][5];

        int[] ten={1,2,6,3,6,1,7};
        for(int i=0;i<map.length;++i){
            map[i] = ten.clone();
        }
或直接双重for循环。。。

在这里插入代码片

来源:https://blog.csdn.net/qq_38777624/article/details/74999750

你可能感兴趣的文章
透彻理解神经机器翻译的原理
查看>>
实践:动手搭建聊天机器人
查看>>
情感分析 Kaggle 实战
查看>>
动手实现 Bahdanau 注意力模型
查看>>
用一个小例子理解 seq2seq 的本质
查看>>
双向 LSTM-CRF 实现命名实体识别
查看>>
序列模型实现词性标注
查看>>
双向 RNN 识别手写数字
查看>>
Peephole LSTM、GRU 实战
查看>>
LSTM 的几种改进方案
查看>>
用 word2vec 进行文档聚类
查看>>
详解 GloVe 的原理和应用
查看>>
word2vec:基于层级 softmax 和负采样的 Skip-Gram
查看>>
word2vec:基于层级 softmax 和负采样的 CBOW
查看>>
用 RNN 建立语言模型
查看>>
LSTM 三重门背后的故事
查看>>
具有记忆能力的 RNN
查看>>
TensorFlow 2.0 Alpha 实用教程
查看>>
一文掌握 Keras
查看>>
一文掌握 TensorFlow 基础
查看>>