如何在Java中将二维数组从一个复制到另一个?

3

我想知道将二维数组从临时数组复制到原始数组的正确方法。 程序开始时,数组大小未知,用户稍后设置它。 以下是代码:

private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][], int row, int column)

{

      for ( int i = 0 ; i < row-1; ++i)
      {
          for (int j = 0; j < column; j++)
          {
              origin_Matrix[i][j] = copy_Matrix[i][j]; 

          }
      }

}

我知道这是错误的,请帮忙...
4个回答

3
在Java中不需要前缀递增。同时,您不需要在Java中传递行和列计数(这只会留下错误的空间)。此外,存在一个名为System.arraycopy的函数,该函数应该至少与逐个复制它们的效率相当,如果不是更高效的话。
private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][])
{
    /* assert origin_Matrix.length == copy_Matrix.length */
    for ( int i = 0 ; i < origin_Matrix.length; i++)
    {
        /* assert origin_Matrix[i].length == copy_Matrix[i].length */
        System.arraycopy(origin_Matrix[i], 0, copy_Matrix[i], 0, origin_Matrix[i].length);
    }
}

请注意,您应该了解Java集合(如List / ArrayList或Vector),并有意识地决定在您的情况下是否需要int数组的轻微性能提升,而不是Collections提供的额外可读性和便利性。

2

最好以类似以下内容结束:

private static int[][] copy_Matrix(int origin_Matrix[][])
{
    int copy[][] = new int[origin_Matrix.length][origin_Matrix[0].length];
    for ( int i = 0 ; i < origin_Matrix.length; ++i)
    {
        System.arraycopy(origin_Matrix[i], 0, copy[i], 0, origin_Matrix[i].length);
    }
    return copy;
}

1

你使用基本数据类型而非Java集合,是有特别的原因吗?如果没有,我建议你使用后者。它们经过优化,在操作方面提供了相当强大的API。


int数组在某些操作中有其用武之地。例如,在解决复杂的Project Euler问题时,我使用Vector代替数组,因为它更容易使用,并且我认为它已经被优化到足够的程度,不会有太大的差别;但是当我对速度感到失望时,我切换到了int数组,这是一个巨大的改进。然而,我同意Edan应该了解Java集合,并有意识地决定使用int数组更好。在这种情况下,他似乎只是从C/C++移植代码,这可以从前缀运算符和行列参数中看出来。 - Ricket

0

@Eden

这段代码并不完美,为什么在第一个循环中要进行i < row-1的检查呢?我猜你应该使用i < row的检查。

此外,你不需要显式地传递大小。你可以使用数组的.length字段来获取它们的大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接