Java 我对复制二维数组感到困惑
我读了这篇关于堆栈溢出的文章:我对克隆方法在这里的工作原理有点困惑Java 我对复制二维数组感到困惑,java,multidimensional-array,Java,Multidimensional Array,我读了这篇关于堆栈溢出的文章:我对克隆方法在这里的工作原理有点困惑 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; } 4) 还复制[i]?这是一个2D数组,所以它不应该是copy[i][?或者
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;
}
4) 还
复制[i]
?这是一个2D数组,所以它不应该是copy[i][
?或者类似的 在Java中,2D数组本质上是数组的数组(可能具有不同的长度)。记住这一点很重要。例如,这是确定的:
int[][] ar = new int[2][];
ar[0] = new int[8]; // ar[0][0..7]
ar[1] = new int[4]; // ar[1][0..3]
语法newint[8][10]
可以方便地创建8个单独的数组,每个数组包含10个元素
如果您熟悉C:Java中的int[][]
更类似于C中的int**
注意:Map
是Java中变量的一个糟糕名称;变量名通常以小写字母开头,还有一个非常常见的同名基本容器接口
1) 为什么要将Map.length放在第一组方括号中,而不是Map[0]。int[][]copy=new int[Map.length][];,则将length放在第二组方括号中
因为我们从Map.lengthint[]
数组开始,然后一次克隆一个
我们不也需要初始化列的长度吗
不,因为当我们在Map
中遍历每个int[]
时,我们只是使用clone()
来复制它:copy[i]=Map[i].clone()
通过一次克隆一列列并将其放入我们的2D数组,它为我们设置了列的长度
“列”只是您提出的一个概念,它仅与表格数据(特定上下文中的列主要表格数据)相关。不管怎样,“设置长度”并不准确,因为它意味着一开始就存在被设置长度的东西;但是当您执行intx[][]=newx[5][]
时,x[0]
将null
,直到您将其分配给某个对象。通过一次克隆一个int[]
s,我们只是。。。一次克隆一个。因此,是的,每个克隆将与原始克隆大小相同
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;
}
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;
}
public int[]CopyMap(int[]Map)
{
int[][]复制=新int[][Map[0]。长度];
对于(int i=0;i
没有;希望原因现在清楚了,因为您知道int[][]
是数组的数组。表达式newint[][size]
没有多大意义;它说我们希望数组中的每个int[]
都有一个给定的大小,但没有说数组中有多少int[]
s。这是错误的,原因与int[]x=new int[]错误的原因相同
4) 还复制[i]
?这是一个2D数组,所以它不应该是copy[i][
?或者类似的
不,它应该是copy[i]
。我将把找出原因作为一项练习。还将看看哪一项解释得很好。