[JAVA] 배열 복사 메소드

SangJin Ham·2024년 2월 1일
0

JAVA

목록 보기
10/15
post-thumbnail

배열 복사 메소드

Arrays 클래스는 배열과 관련된 여러 메소드들을 지원한다.
해당 클래스는 java.util 패키지에 포함되어 있어 사용하기 위해서는 import가 필요하다.

import java.util.Arrays;

Arrays.copyOf()

Arrays.copyOf(복사 대상 배열, 복사할 길이) : 지정한 배열을 인덱스 0부터 원하는 길이만큼 복사해 배열로 반환한다.

  • 원본 배열이 입력한 길이보다 큰 경우 : 인덱스 0부터 입력한 길이까지 복사된다.
  • 원본 배열이 입력한 길이보다 작을 경우 : 원본 배열길이보다 큰 인덱스 이후의 값은 배열의 타입 기본값으로 초기화되어 복사된다.
// 원본 배열이 입력한 길이보다 큰 경우
int[] intArr = new int[] {1, 2, 3, 4, 5};
int[] intArrCopy = Arrays.copyOf(intArr, 3);
// [1, 2, 3] 출력
System.out.println(Arrays.toString(intArrCopy));


// 원본 배열이 입력한 길이보다 작을 경우
String[] strArr = new String[] {"copy", "of", "method"};
String[] strArrCopy = Arrays.copyOf(strArr, 5);
// [copy, of, method, null, null] 출력
System.out.println(Arrays.toString(strArrCopy));

Arrays.copyOfRange()

Arrays.copyOfRang(복사 대상 배열, 복사 시작 인덱스, 복사 끝 인덱스) : 지정한 배열에서 특정 범위만큼의 요소들을 복사해 새로운 배열로 반환한다.

  • 원본 배열이 복사 끝 인덱스보다 작은 경우 : 원본 배열길이보다 큰 인덱스 이후의 값은 배열의 타입 기본값으로 초기화되어 복사된다.
  • 원본 배열이 복사 시작 인덱스보다 작은 경우 : exception이 발생한다.
// 복사할 범위가 배열에 다 존재하는 경우
int[] intArr = new int[] {1, 2, 3, 4, 5};
int[] intArrCopy = Arrays.copyOfRange(intArr, 2, 4);
// [3, 4] 출력
System.out.println(Arrays.toString(intArrCopy));


// 원본 배열이 복사 끝 인덱스보다 작은 경우
String[] strArr = new String[] {"copy", "of", "range", "method"};
String[] strArrCopy = Arrays.copyOfRange(strArr, 3, 7);
// [Method, null, null, null] 출력
System.out.println(Arrays.toString(strArrCopy));


// 원본 배열이 복사 시작 인덱스보다 작은 경우
String[] strArr = new String[] {"copy", "of", "method"};
// ArrayIndexOutOfBoundsException 발생
String[] strArrCopy = Arrays.copyOfRange(strArr, 4, 6);

System.arraycopy()

System.arraycopy(복사할 배열, 복사 시작 인덱스, 붙여넣기할 배열, 붙여넣기 시작 인덱스, 복사해 붙여넣기할 길이) : 복사할 배열에서 복사 시작인덱스부터 복사해 붙여넣기할 길이만큼 붙여넣기할 배열에 붙여넣는다.

  • System.arraycopy() 메소드는 Arrays에서 제공되는 메소드와 달리 System에 포함된 메소드로 따로 import가 필요하지 않다.
// intArr1 배열 인덱스 1부터 3개를 복사해 intArr2 배열 인덱스 2부터 붙여넣는다.
int[] intArr1 = new int[] {1, 2, 3, 4, 5};
int[] intArr2 = new int[] {99, 98, 97, 96, 95};
System.arraycopy(intArr1, 1, intArr2, 2, 3);
// [99, 98, 2, 3, 4] 출력
System.out.println(Arrays.toString(intArr2));


// strArr3에 strArr1, strArr2 배열을 합치기
String[] strArr1 = new String[] {"example", "of"};
String[] strArr2 = new String[] {"system", "arraycopy", "method"};
String[] strArr3 = new String[strArr1.length + strArr2.length];
System.arraycopy(strArr1, 0, strArr3, 0, strArr1.length);				// strArr3에 strArr1 복사
System.arraycopy(strArr2, 0, strArr3, strArr1.length, strArr2.length);	// strArr3에 strArr2 복사
// [example, of, system, arraycopy, method] 출력
System.out.println(Arrays.toString(strArr3));
profile
끄적끄적

0개의 댓글