Java/배열

[Java]두 배열을 합치는 방법

DevStory 2022. 8. 17.

두 배열을 합치는 방법

이번 포스팅은 Java에서 두 개의 배열을 연결하여 하나의 새로운 배열을 만드는 몇 가지 방법을 소개합니다.


방법 1. 반복문

가장 심플한 방법으로 반복문을 사용할 수 있습니다.

 

두 배열의 길이를 더한 값을 새로운 배열의 크기로 설정합니다.

 

첫 번째 배열을 순회하여 새로운 배열에 값을 할당합니다.

 

똑같은 방법으로 두 번째 배열의 값을 새로운 배열에 할당합니다.

public static void main(String args[]) {
  int[] intArray1 = {1, 2, 3, 4};
  int[] intArray2 = {3, 4, 5, 6};
  int[] newArray = new int[intArray1.length + intArray2.length];
  int index = 0;

  for(int num: intArray1) {
    newArray[index++] = num;
  }

  for(int num: intArray2) {
    newArray[index++] = num;
  }

  System.out.println("intArray1: " + Arrays.toString(intArray1));
  System.out.println("intArray2: " + Arrays.toString(intArray2));
  System.out.println("newArray: " + Arrays.toString(newArray));
}

[실행 결과]

intArray1: [1, 2, 3, 4]
intArray2: [3, 4, 5, 6]
newArray: [1, 2, 3, 4, 3, 4, 5, 6]

방법 2. System 클래스의 arraycopy 메서드

두 번째 방법으로 System 클래스의 arraycopy() 메서드를 사용합니다.

public static native void arraycopy(
  Object src, int srcPos,
  Object dest, int destPos,
  int length);

Object src

- 값이 존재하는 배열입니다.

 

int srcPos

- 첫 번째 매개변수(Object src)의 시작 위치를 설정합니다.

- 0으로 설정하는 경우 0번째 인덱스부터 시작합니다.

 

Object dest

- 첫 번째 매개변수(Object src)에서 복사된 값이 할당되는 배열입니다.

- 즉, 새로운 배열입니다.

 

int destPos

- 세 번째 매개변수(Object dest)의 시작 위치를 설정합니다.

- 0으로 설정하는 경우 0번째 인덱스부터 값이 할당됩니다.

 

int length

- 첫 번째 매개변수(Object src)의 두 번째 매개변수(int srcPos)인 시작 위치에서 복사할 요소의 개수를 설정합니다.

 

다음 예제는 두 배열의 길이를 더한 값을 새로운 배열의 크기로 설정 후 System 클래스의 arraycopy() 메서드를 사용하여 두 배열의 값을 새로운 배열에 할당합니다.

public static void main(String args[]) {
  int[] intArray1 = {1, 2, 3, 4};
  int[] intArray2 = {3, 4, 5, 6};
  int[] newArray = new int[intArray1.length + intArray2.length];

  System.arraycopy(intArray1, 0, newArray, 0, intArray1.length);
  System.arraycopy(intArray2, 0, newArray, intArray1.length, intArray2.length);

  System.out.println("intArray1: " + Arrays.toString(intArray1));
  System.out.println("intArray2: " + Arrays.toString(intArray2));
  System.out.println("newArray: " + Arrays.toString(newArray));
}

[실행 결과]

intArray1: [1, 2, 3, 4]
intArray2: [3, 4, 5, 6]
newArray: [1, 2, 3, 4, 3, 4, 5, 6]

방법 3. Collection으로 변환 후 addAll 메서드

컬렉션(Collection)을 활용하여 두 배열을 합칠 수 있습니다.

 

첫 번째 배열을 초기값으로 가지는 새로운 List 객체를 생성합니다.

 

List 객체에서 addAll() 메서드를 사용하여 두 번째 배열의 값을 추가합니다.

 

마지막으로 List 객체의 값을 배열에 할당합니다.

public static void main(String args[]) {
  String[] strArray1 = {"A", "B"};
  String[] strArray2 = {"B", "C", "D"};
  
  // 첫 번째 배열을 초기값으로 가지는 List 객체 생성
  List<String> newList = new ArrayList<>(Arrays.asList(strArray1));
  // addAll() 메서드를 호출하여 두 번째 배열의 값을 추가
  newList.addAll(new ArrayList<>(Arrays.asList(strArray2)));

  // List 객체의 값을 배열에 할당
  String[] newArray = new String[newList.size()];
  newArray = newList.toArray(newArray);

  System.out.println("strArray1: " + Arrays.toString(strArray1));
  System.out.println("strArray2: " + Arrays.toString(strArray2));
  System.out.println("newArray: " + Arrays.toString(newArray));
}

[실행 결과]

strArray1: [A, B]
strArray2: [B, C, D]
newArray: [A, B, B, C, D]

방법 4. Stream API

Java 버전이 1.8 이상인 경우 Stream에서 제공하는 concat() 메서드를 사용하여 두 배열이 연결된 새로운 배열을 생성할 수 있습니다.

 

두 배열을 스트림으로 변환 후 concat() 메서드를 사용하여 스트림을 하나로 연결합니다.

 

연결된 스트림을 배열로 변환하기 위해 toArray() 메서드를 호출합니다.

public static void main(String args[]) {
  String[] strArray1 = {"A", "B"};
  String[] strArray2 = {"B", "C", "D"};

  String[] newArray = Stream.concat(Arrays.stream(strArray1),
                                    Arrays.stream(strArray2))
                            .toArray(String[]::new);

  System.out.println("strArray1: " + Arrays.toString(strArray1));
  System.out.println("strArray2: " + Arrays.toString(strArray2));
  System.out.println("newArray: " + Arrays.toString(newArray));
}

[실행 결과]

strArray1: [A, B]
strArray2: [B, C, D]
newArray: [A, B, B, C, D]
반응형

댓글