Подтвердить что ты не робот

Объединение двух целых массивов

Есть ли способ создать один массив из двух? Например.

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

Ответ 1

Вы не можете добавить их напрямую, вам нужно создать новый массив, а затем скопировать каждый из массивов в новый. 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);

Это будет работать независимо от размера array1 и array2.

Ответ 2

Вот простая функция, которая использует переменные аргументы:

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

Ответ 3

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

Ответ 4

используйте ArrayUtils.addAll(T [], T...):

import org.apache.commons.lang3.ArrayUtils;

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

Ответ 5

Да, но это не совсем так просто. Создайте третий массив, размер которого состоит из двух массивов, и проведите через каждый исходный массив и переместите элементы. Также просмотрите System.arraycopy().

Ответ 6

Найдите общий размер обоих массивов и установите array1and2 в общий размер обоих добавленных массивов. Затем запустите array array1 и затем array2 и добавьте значения в array1and2.

Ответ 7

ПРИМЕЧАНИЕ: не проверял его

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

Ответ 8

Я думаю, вам нужно выделить новый массив и поместить значения в новый массив. Например:

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

Насколько я могу судить, глядя на него, этот код должен работать.

Ответ 9

Задача: если заданы два массива массива array1 и array2 одинаковой длины, zip должен возвращать массив, который в два раза длиннее, в котором элементы массива 1 и массив2 чередуются. То есть элемент # 0 массива результатов - array1 [0], элемент # 1 - это array2 [0], элемент # 2 - это массив1 [1], элемент # 3 - это массив2 [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;

}