关于Java:将2个数组复制到一个新数组中

Copy 2 array in a new one

本问题已经有最佳答案,请猛点这里访问。

将两个数组复制到新数组中的最佳方法(优雅/高效)是什么?

当做,

f


我的声誉不允许我对阿达姆斯基的回答发表评论,但这一行有一个错误:

1
 System.arraycopy(src2, 0, dest, src1.length - 1, src2.length);

使用src1.length-1作为destpos的参数,可以覆盖从src1数组复制的最后一个元素。在本例中,您将覆盖索引4上的元素,该元素是数组的第5个元素。

此代码可能更容易理解:

1
2
3
4
5
6
7
8
9
10
    int[] array1 = { 1, 2, 3 };
    int[] array2 = { 4, 5, 6, 7 };
    int[] array3 = new int[ array1.length + array2.length ];

    System.arraycopy( array1, 0, array3, 0, array1.length );
    System.arraycopy( array2, 0, array3, array1.length, array2.length );

    for (int i = 0; i < array3.length; i++) {
        System.out.print( array3[i] +"," );
    }


如图所示,您可以使用[System.ArrayCopy][1]。

[1 ]:http://cliop.oracle /javas/1.4.2/DOCS/API/Java/Lang/Stask.html HTML ARRayScript(JavaLang.Objt,int,java. Lang.Objt,int,int)


使用System.arraycopy可以利用底层硬件尽可能高效地执行阵列复制。

在这个问题的背景下,你需要打两次电话给System.arraycopy;例如

1
2
3
4
5
6
7
8
9
10
11
12
int[] dest = new int[10];
int[] src1 = new int[5];
int[] src2 = new int[5];

// Populate source arrays with test data.
for (int i=0; i<5; ++i) {
  src1[i] = i;
  src2[i] = i + 100;
}

System.arraycopy(src1, 0, dest, 0, src1.length);
System.arraycopy(src2, 0, dest, src1.length, src2.length);