最短路径问题出了问题。 对于二维int数组map[][],必须将其初始化为int的最大值。 我不想在双重循环中分配初始值。 Arrays.fill ) )我想填补,但是失败了。
首先,Arrays.fill ()并不提高赋值的效率,它在函数内部也是通过for循环实现的。
fill ) )函数的源代码:
publicstaticvoidfill(object[]a,Object val ) {
for(intI=0,len=a.length; i len; I )
a[i]=val;
}
由此可见,fill (函数只能填充一维数组。 这样使用的话,会失败的吧。
int [ ] [ ]映射=new int [4] [5];
Arrays.fill(map,-1); //失败
但是,可以用别的方法实现。 二维数组实际上是一维数组的数组。 也就是说,它本身只是一维数组,但数组中的每个变量也是一维数组。
因此,这是一维数组,可以用相应类型的变量填充。 也就是说,可以用一维数组填充。
int [ ] [ ]映射=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 [ ] [ ]映射=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}
感谢您的指出。 由于贴图中的每个项目都指向同一一维数组ten,因此无法使用上述方法为二维数组赋值。 如果修改影响其他地址的值并修改map[0][1]=100,则map[1][1] map[2][1]等将变为100。
到目前为止,我们已经介绍了Java使用Arrays.fill )初始化二维数组的实现。 有关更多相关Java初始化二维数组的信息,请搜索以前的文章或继续查看下面的相关文章。 今后也请多多关照。