2011-01-15 6 views
22

두 개 중에서 하나의 배열을 만드는 방법이 있습니까? 예 :두 개의 정수 배열을 결합하십시오.

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

어떤 작업을 수행하려고합니까? 배열을 연결하거나 요소를 합칩니다. – mob

답변

63

당신은 직접 추가 할 수 없습니다 테스트하지 않았다. 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의 크기에 관계없이 작동합니다.

1

예. 그렇지만 그렇게 쉬운 것은 아닙니다. 두 개의 배열을 합친 크기의 세 번째 배열을 만들고 각각의 원래 배열을 반복하여 항목을 이동합니다. System.arraycopy()도 참조하십시오.

1

두 어레이의 전체 크기를 찾고 추가 된 두 어레이의 전체 크기에 대해 array1and2를 설정하십시오. 그런 다음 array1과 array2를 반복하고 array1and2에 값을 추가하십시오.

+0

-1을 넣는 이유는 무엇입니까? 예 : 제안 된 방법이 실패 했습니까? 단순히 여러 가지 방법에 대한 의견 차이가 있지만 둘 다 동일한 결과를 산출한다면 좋은 이유는 아닙니다. – thotheolh

1

참고 : 새로운 배열을 한 다음 새 하나에 배열의 각을 복사해야, 그것은

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

새로운 배열을 할당하고 새로운 배열에 값을 넣어야한다고 생각합니다. 예를 들면 다음과 같습니다.

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

여기까지 살펴보면이 코드가 작동합니다.

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

0

작업에 비해 매우 느린 두 INT 배열이 배열 1과 같은 길이의 배열 2, 지퍼 두 배의 배열을 반환해야 감안할 때 배열 1과 배열 2의 요소가 인터리브 된 long입니다. 즉, 결과 배열의 요소 # 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; 

} 
6

간단한 함수 :

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

사용 ArrayUtils.addAll (T [] T를 ...)

import org.apache.commons.lang3.ArrayUtils; 

AnyObject[] array1 = ...; 
AnyObject[] array2 = ...; 
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2); 
관련 문제