Java/Short 개발

[Java/Short] 두 개의 배열을 하나의 배열로 합치는 다양한 방법

adjh54 2023. 6. 5. 16:21
반응형
해당 글에서는 두 개의 타입이 동일한 배열을 하나로 합치는 방법에 대해서 공유합니다.




 

1) System.arraycopy() 메서드를 이용하여 구성


💡 해당 방법은 System.arraycopy() 함수를 이용하여서 새로운 배열로 구성하는 방법입니다.

💡 이는 내부 함수 java.lang.System를 이용하여서 두 개의 배열을 하나로 조합합니다.
// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// 두 개의 배열을 합쳐 새로운 배열 생성
int[] arr3 = new int[arr1.length + arr2.length];
System.arraycopy(arr1, 0, arr3, 0, arr1.length);
System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);

// 합쳐진 배열 출력
System.out.println(Arrays.toString(arr3));  // [1, 2, 3, 4, 5, 6]

 

[참고] 메서드 구문
💡 System.arraycopy() 함수는 배열의 일부 또는 전체를 다른 배열로 복사하는 기능을 수행합니다.
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  • src : 복사 대상 배열
  • srcPos : 복사 대상 배열에서 복사를 시작할 index 위치
  • dest : 복사 결과를 저장할 대상 배열
  • destPos : 대상 배열에서 복사를 시작할 index 위치
  • length : 복사할 요소의 수

 

 

2) Stream 메서드를 이용하여 구성 : Intstream.concat()


💡 해당 방법은 IntStream.concat() 함수를 이용하여서 배열을 합친 뒤 배열로 변경하는 방법입니다.

💡  배열을 IntStream.Stream으로 변경한 후 다시 배열로 변형하는 방법입니다.
// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// 두 개의 배열을 합쳐 새로운 배열 생성
int[] arr3 = IntStream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).toArray();

// 합쳐진 배열 출력
System.out.println(Arrays.toString(arr3));

 

[참고] 메서드 구문
💡 IntStream.concat() 함수는 두 개의 IntStream을 하나의 스트림으로 병합하는 데 사용됩니다.
static IntStream concat(IntStream a, IntStream b)
  • a : 첫 번째 IntStream
  • b : 두 번째 IntStream

 

 

3) 반복문을 이용하여 구성 : for문 + 인덱스


💡 해당 방법은 for문을 순회하면서 인덱스를 이용하여서 배열을 합친 뒤 반환해 주는 함수입니다.
// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// 두 개의 배열을 합쳐 새로운 배열 생성
int[] arr3 = new int[arr1.length + arr2.length];
int index = 0;
for (int i = 0; i < arr1.length; i++) {
    arr3[index++] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
    arr3[index++] = arr2[i];
}

// 합쳐진 배열 출력
System.out.println(Arrays.toString(arr3));

 

 

 

4) Arrays 함수를 이용하여 구성 : Arrays.copyOf, Arrays.copyOfRange


1. Arrays.copyOf() 함수를 이용하여 구성방법


💡 배열1을 기준으로 배열을 구성한 뒤 System.arraycopy() 함수를 이용하여서 배열을 합칩니다.
// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// 두 개의 배열을 합쳐 새로운 배열 생성
int[] arr3 = Arrays.copyOf(arr1, arr1.length + arr2.length);
System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);

// 합쳐진 배열 출력
System.out.println(Arrays.toString(arr3));

 

[참고] 메서드 구문
💡 Arrays.copyOf() 함수는 배열의 일부 또는 전체를 다른 배열로 복사하는 데 사용됩니다.
public static <T> T[] copyOf(T[] original, int newLength)
  • original: 복사 대상 배열
  • newLength: 복사할 길이

 

2. Arrays.copyOfRange() 함수를 이용한 구성방법


// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// 두 개의 배열을 합쳐 새로운 배열 생성
int[] arr3 = Arrays.copyOfRange(arr1, 0, arr1.length + arr2.length);
System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);

// 합쳐진 배열 출력
System.out.println(Arrays.toString(arr3));

 

[참고] 메서드 구문
💡 Arrays.copyOfRange() 함수는 배열의 일부분을 복사하여 새로운 배열을 생성합니다.
public static int[] copyOfRange(int[] original, int from, int to)
  • original: 복사하고자 하는 원본 배열
  • from: 복사할 원본 배열의 시작 인덱스
  • to: 복사할 원본 배열의 끝 인덱스 (복사 대상에는 해당 인덱스 미포함)

 

5) Array to ArrayList 를 이용하여 구성


💡 두개의 배열을 리스트로 변형 후 다시 배열로 반환받는 방식의 구성입니다.

1. 배열1을 Integer []로 Boxing을 수행하고 리스트로 변환합니다.
2. 배열2도 동일하게 Integer []로 변환하고 리스트로 변환하고 리스트에 값을 모두 추가합니다.
3. 새로운 배열 3에 Stream을 이용하여 List를 int []로 변환합니다.
// 두 개의 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

// [STEP1] int[]를 List로 Boxing하여 구성합니다. : int[] to Integer[] to List<Integer>
List<Integer> list = Arrays.stream(arr1).boxed().collect(Collectors.toList());

// [STEP2] 배열2를 boxing하여 기존 배열1에 추가합니다. : int to Integer[]
list.addAll(Arrays.stream(arr2).boxed().collect(Collectors.toList()));

// 배열 1, 2의 합에 대해 리스트를 배열로 변경합니다. : List to int[]
int[] arr3 = list.stream().mapToInt(i -> i).toArray();
System.out.println(Arrays.toString(arr3));

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

반응형