Java 2D数组副本

时间:2012-11-04 19:02:49

标签: java

我有一个2D数组,我只需要将第一行复制到另一个相同大小的数组中。这样做的最佳方式是什么?我试过这个:

public static int[][] buildCME(int[][] array){

    int [][] arrayCME = new int[array.length][array[0].length];


    for(int y = 1; y < array.length; y++)
    {

        for (int x = 0; x < 1; x++)
        {

            arrayCME[y][x] = array[y][x];

        }
    } 

然而,这只是给了我第一行的0,我假设这与我的int初始化有关。我为循环创建了这个,因为我认为考虑比在正常for循环中创建if语句以考虑整个2D数组更容易。谢谢您的帮助!

2 个答案:

答案 0 :(得分:5)

您的代码从第二行开始复制第一列(您的内部循环为x <1)(外部循环从1开始)。如果要复制第一行,请执行

 for (int x = 0; x < array[0].length; x++)
 {
      arrayCME[0][x] = array[0][x];
 }

为了更有效地执行此操作,您可能需要查看System.arraycopy

System.arraycopy(array[0],0,arrayCME[0],0,array[0].length);

System.arraycopy应该执行更高效的副本,因为它是native方法。此外,一些JVM(例如HotSpot JVM)将此方法视为内在。 JVM通常会使用特定于体系结构的代码替换对内在函数方法的调用,在arraycopy的情况下,可能是直接复制内存的机器代码。

答案 1 :(得分:2)

这是因为你的外部循环从1开始,而不是0,并且当数组从0开始时,第一行将始终保持不变。