java我对复制2D数组感到困惑
我读了这篇关于堆栈溢出的文章:copy a 2d array in java,我对克隆方法在这里的工作原理有点困惑
public int[][] CopyMap(int[][] Map)
{
int [][] copy = new int[Map.length][];
for(int i = 0; i < Map.length; i++)
copy[i] = Map[i].clone();
return copy;
}
我知道如何使用增强的for循环进行复制,但我想完全理解这种方法
1)我们为什么要放地图。第一组方括号中的长度,但不是映射[0]。第二组方括号中int[][] copy = new int[Map.length][];
的长度?我们不也需要初始化列的长度吗?我猜我们不能克隆2D数组,但我们可以一次克隆一行或一列
2)通过一次克隆一列并将其放入我们的2D数组中,可以为我们设置列的长度
3)我们可以通过这样做来逆转这个代码吗
public int[][] CopyMap(int[][] Map)
{
int [][] copy = new int[][Map[0].length];
for(int i = 0; i < Map[0].length; i++)
copy[i] = Map[i].clone();
return copy;
}
4)还有copy[i]
?这是一个2D数组,所以它不应该是copy[i][]
?或者类似的
# 1 楼答案
在Java中,2D数组本质上是数组的数组(可能具有不同的长度)。记住这一点很重要。例如,这是可以的:
语法
new int[8][10]
可以方便地创建8个单独的数组,每个数组包含10个元素如果您熟悉C:Java中的
int[][]
与C中的int**
更相似注意:
Map
是Java中变量的可怕名称;变量名通常以小写字母开头,还有一个非常常见的同名基本容器接口因为我们从一个映射数组开始。长度
int[]
,然后一次克隆一个int[]
不,因为当我们在
Map
中遍历每个int[]
时,我们只是使用clone()
来复制它:copy[i] = Map[i].clone()
“列”只是一个概念,它只与表格数据(特定上下文中的列主要表格数据)相关。不管怎样,“设置长度”并不准确,因为它意味着一开始就存在被设置长度的东西;但是当你做
int x[][] = new x[5][]
的时候,x[0]
就是null
,直到你把它分配给某个东西。通过一次克隆int[]
的一个,我们只是。。。一次克隆一个。所以,是的,每个克隆都将与原始克隆大小相同没有;希望原因现在已经很清楚了,因为
int[][]
是数组的数组。表达式new int[][size]
没有多大意义;它说我们希望数组中的每个int[]
都有一个给定的大小,但没有说数组中有多少int[]
。这是错误的,原因和int[] x = new int[]
是错误的一样不,应该是
copy[i]
。我将把找出原因作为练习