Java

[Java] copyOf(), copyOfRange(), arrayCopy()

lala9663 2023. 6. 29. 21:27

배열을 복사하기 위해 for문을 사용하다 시간초과가 떠서 다른 방법을 찾다가 알게되었다.
copyOf(), copyOfRange(), arrayCopy() 는 배열을 복사하는 방법이다.


copyOf()

copyOf() 메서드는 java.util.Arrays 클래스에 포함된 배열 복사 메서드이다.
java.util 패키지에 포함되어 있으므로 Arrays의 메서드들을 사용하기 위해서는 import가 필요하다.

import java.util.Arrays;

지정한 배열을 인덱스 0부터 원하는 길이만큼 복사한다. 원본 배열이 입력한 길이보다 클 경우 입력한 길이 이후의 인덱스는 제거되어 copy 되고, 원본 배열이 입력한 길이보다 작을 경우 원본 배열에서 존재하지 않는 인덱스 이후의 값은 배열의 타입 기본값으로 초기화되어 copy 된다.

원본 배열의 길이가 입력한 길이보다 큰 경우

int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(original, 3);

System.out.println(Arrays.toString(copy));

결과

[1, 2, 3]

원본 배열의 길이가 입력한 길이보다 작은 경우

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);

System.out.println(Arrays.toString(copy));

결과

[1, 2, 3, 0, 0]

문자열 배열의 경우

String[] original = {"a", "b", "c"};
String[] copy = Arrays.copyOf(original, 2);

System.out.println(Arrays.toString(copy));

결과

[a, b]

문자열 배열의 경우에도 동일한 방식으로 동작한다. 입력한 길이만큼의 요소가 복사되고, 길이 이후의 인덱스는 null로 초기화 된다.

두 배열을 합치는 방법

int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

int[] combined = Arrays.copyOf(arr1, arr1.length + arr2.length);
System.arraycopy(arr2, 0, combined, arr1.length, arr2.length);

copyOfRange()

지정한 배열에서 특정 범위만큼 요소들을 복사해 새로울 배열로 반환한다.
복사할 배열의 길이가 복사를 끝낼 인덱스로 입력한 길이보다 작을 경우 원본 배열의 마지막 인덱스 이후의 값은 배열의 타입 기본값으로 초기화되어 복사된다.

배열의 일부 요소를 복사

int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(original, 1, 4);

System.out.println(Arrays.toString(copy));

결과

[2, 3, 4]

배열의 길이가 복사 범위보다 작을 경우

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOfRange(original, 0, 5);

System.out.println(Arrays.toString(copy));

결과

[1, 2, 3, 0, 0]

arraycopy()

Arrays에서 제공되는 메서드와 달리 System에 포함된 메서드로 따로 import가 필요하지 않다
System.arraycopy(source_arr, sourcePos, dest_arr, destPos, len)

  • source_arr: 복사할 배열
  • sourcePos: (복사할 배열)에서 복사를 시작할 인덱스
  • dest_arr: 붙여넣기 할 배열
  • destPost: 붙여넣기를 시작할 인덱스
  • len: (복사할 배열에서) 얼마나 복사해 붙여넣을지 길이를 지정

배열의 일부 요소를 복사하여 다른 배열에 붙여넣기

int[] source = {1, 2, 3, 4, 5};
int[] destination = new int[3];

System.arraycopy(source, 1, destination, 0, 3);

System.out.println(Arrays.toString(destination));

결과

[2, 3, 4]

배열의 일부 요소를 다른 배열의 중간에 붙여넣기

int[] source = {1, 2, 3};
int[] destination = {4, 5, 6, 7, 8};

System.arraycopy(source, 0, destination, 2, 2);

System.out.println(Arrays.toString(destination));

결과

[4, 5, 1, 2, 8]

두 배열을 합치는 방법

int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};

int[] combined = new int[arr1.length + arr2.length];
System.arraycopy(arr1, 0, combined, 0, arr1.length);
System.arraycopy(arr2, 0, combined, arr1.length, arr2.length);







참고: 배열 복사하는 방법