将两个阵列复制到一个新阵列的最佳方式(优雅/高效)是什么?
此致
˚F
答案 0 :(得分:5)
我的声誉不允许我对Adamski的答案发表评论,但这一行有一个错误:
System.arraycopy(src2, 0, dest, src1.length - 1, src2.length);
使用 src1.length - 1 作为 destPos 的参数,覆盖从 src1 数组复制的最后一个元素。在这种情况下,您将覆盖索引4上的元素,该元素是数组的第5个元素。
此代码可能更容易理解:
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] + ", " );
}
答案 1 :(得分:0)
使用System.arraycopy
利用底层硬件尽可能高效地执行阵列复制。
在问题的上下文中,您需要拨打System.arraycopy
两次; e.g。
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);
答案 2 :(得分:0)
您可以使用[System.arraycopy] [1],如图所示here。
[1]:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang.Object,int,int)