Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并两个整数数组_Java_Arrays - Fatal编程技术网

Java 合并两个整数数组

Java 合并两个整数数组,java,arrays,Java,Arrays,有没有办法从两个数组中创建一个数组?例如 int[] array1 = {1,2,3}; int[] array2 = {4,5,6}; int[] array1and2 = array1 + array2; 是的,但不是那么容易。创建第三个数组,该数组的大小与两个数组的大小相同,并循环遍历每个原始数组,然后将项目移到上面。同时查看System.arraycopy()找到两个数组的总大小,并将array1和array2设置为添加的两个数组的总大小。然后循环array1和array2,并将值添加

有没有办法从两个数组中创建一个数组?例如

int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array1and2 = array1 + array2;

是的,但不是那么容易。创建第三个数组,该数组的大小与两个数组的大小相同,并循环遍历每个原始数组,然后将项目移到上面。同时查看
System.arraycopy()

找到两个数组的总大小,并将array1和array2设置为添加的两个数组的总大小。然后循环array1和array2,并将值添加到array1和array2中。

注意:没有测试它

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;
}

不能直接添加它们,必须创建一个新数组,然后将每个数组复制到新数组中。是可用于执行此复制的方法

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);

无论数组1和数组2的大小如何,这都会起作用。

我认为您必须分配一个新数组,并将值放入新数组中。例如:

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++;
}
int[]array1and2=新的int[array1.length+array2.length];
int currentPosition=0;
for(int i=0;i
就我所知,只要看看它,这段代码应该可以工作

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 );

不要使用逐元素复制,这与任务相比非常慢:给定两个相同长度的int数组array1和array2,zip应该返回一个长度为两倍的数组,其中array1和array2的元素是交错的。也就是说,结果数组的元素#0是array1[0],元素#1是array2[0],元素#2是array1[1],元素#3是array2[1],依此类推

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;

}
公共静态int[]zip(int[]array1,int[]array2){
//确保两个数组的长度相同
if(array1.length!=array2.length){
抛出新的IllegalArgumentException(“数组长度不等-无法压缩”);
}
int[]zippedArray=newint[array1.length+array2.length];
int idx_1=0;
int idx_2=0;
//对于第一个数组的每个元素,若新数组的索引为偶数,则将其添加到新数组中
对于(int i=0;i
这里有一个使用变量参数的简单函数:

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;
}
使用ArrayUtils.addAll(T[],T…):


你想做什么?连接数组或求元素的和?对于这样做的人,有没有很好的理由放a-1?例如,建议的方法失败了?如果只是在不同的方法上存在分歧,但两者产生相同的结果,那么这不是一个很好的理由。有apache.commons.lang3.ArrayUtils库的参考链接吗?
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) );
import org.apache.commons.lang3.ArrayUtils;

AnyObject[] array1 = ...;
AnyObject[] array2 = ...;
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2);