有没有一种方法可以将两个数组合并成一个数组?例如:
int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array1and2 = array1 + array2;
你不能直接添加它们,你需要创建一个新数组,然后将每个数组复制到新数组中。System.arraycopy是一种可以用来执行此复制的方法。
int[] array1and2 = new int[array1.length + array2.length];
System.arraycopy(array1, 0, array1and2, 0, array1.length);
System.arraycopy(array2, 0, array1and2, array1.length, array2.length);
这里有一个使用可变参数的简单函数:
final static
public int[] merge(final int[] ...arrays ) {
int size = 0;
for ( int[] a: arrays )
size += a.length;
int[] res = new int[size];
int destPos = 0;
for ( int i = 0; i < arrays.length; i++ ) {
if ( i > 0 ) destPos += arrays[i-1].length;
int length = arrays[i].length;
System.arraycopy(arrays[i], 0, res, destPos, length);
}
return res;
}
如何使用:
int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array3 = {7,8,9};
int[] array1and2and3 = merge(array1, array2, array3);
for ( int x: array1and2and3 )
System.out.print( String.format("%3d", x) );
int [] newArray = new int[old1.length+old2.length];
System.arraycopy( old1, 0, newArray, 0, old1.length);
System.arraycopy( old2, 0, newArray, old1.length, old2.length );
不要使用逐个元素复制,与 System.arraycopy()
相比,它非常缓慢。
注意:未经测试
int[] concatArray(int[] a, int[] b) {
int[] c = new int[a.length + b.length];
int i = 0;
for (int x : a) { c[i] = x; i ++; }
for (int x : b) { c[i] = x; i ++; }
return c;
}
import org.apache.commons.lang3.ArrayUtils;
AnyObject[] array1 = ...;
AnyObject[] array2 = ...;
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2);
是的,但这并不是那么容易。创建一个大小为两个数组之和的第三个数组,并循环遍历每个原始数组并移动项目。还要查看System.arraycopy()
。
计算数组的总大小,并将array1和array2设置为两个数组的总大小。然后循环遍历array1和array2,并将值添加到array1and2中。
我认为你需要分配一个新的数组,并将值放入新的数组中。例如:
int[] array1and2 = new int[array1.length + array2.length];
int currentPosition = 0;
for( int i = 0; i < array1.length; i++) {
array1and2[currentPosition] = array1[i];
currentPosition++;
}
for( int j = 0; j < array2.length; j++) {
array1and2[currentPosition] = array2[j];
currentPosition++;
}
就我所看到的,这段代码应该可以工作。
public static int [] zip(int [ ] array1, int [] array2) {
//make sure both arrays have same length
if (array1.length != array2.length) {
throw new IllegalArgumentException("Unequal array lengths - zip not possible");
}
int [] zippedArray = new int [array1.length+ array2.length];
int idx_1 = 0;
int idx_2 = 0;
//for each element of first array, add to new array if index of new array is even
for (int i=0; i < zippedArray.length; i+=2){
zippedArray[i]= array1[idx_1++];
}
for (int i=1; i < zippedArray.length; i+=2){
zippedArray[i]= array2[idx_2++];
}
//check contents of new array
for (int item: zippedArray){
System.out.print(item + " ");
}
return zippedArray;
}