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