我有一个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数组更容易。谢谢您的帮助!
答案 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开始时,第一行将始终保持不变。