코테 문제를 풀면서 배열이 복사할 필요가 있을 때 일일히 인덱스를 이용한 반복문으로 복사해 주었지만, 이미 구현되어있는 메소드를 이용하면 시간절약이 될 것 같아서 정리 해놓으려고 한다.
1. System.arraycopy()
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
int[] temp = new int[3]; //요소 3, 4, 5 가져오기
System.arraycopy(arr, 2, temp, 0, 3);
System.out.println(Arrays.toString(temp));
}
실행결과:
[3, 4, 5]
arraycopy()메소드는 5개의 파라미터를 인자로 받는다.
System.arraycopy(arr, 2, temp, 0, 3);
=> arr[2]부터 temp[0]으로 3개의 요소를 복사
배열 arr내용을 배열 temp로, 배열 arr의 첫 번째 요소(arr[0])부터 시작해서 3개의 데이터를 temp의 첫 번째 요소(temp[0])에 복사한다.
이때 복사하려는 배열의 인덱스가 적절하지 못하는 경우 에러(ArrayIndexOutOfBoundsException)가 발생한다.
참고
2. Arrays.copyOfRange()
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
int[] temp = Arrays.copyOfRange(arr, 2, 5); //요소 3, 4, 5 가져오기
System.out.println(Arrays.toString(temp));
}
실행결과:
[3, 4, 5]
Arrays.copyOfRange()함수는 딱히 설명이 필요 없어도 쉽게 이해할 수 있을거라고 생각한다.
Arrays.copyOfRange(복사할 배열, 시작 인덱스, 마지막 인덱스)
인덱스 범위는 시작인덱스 <= i <마지막 인덱스로 마지막 인덱스는 포함되지 않는다.
Arrays.copyOfRange()메소드는 복사한 배열을 만들어서 반환해주기 때문에 더 유용할 것 같다.
3. Arrays.copyOf()
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
int[] temp = Arrays.copyOf(arr, 3); //요소 1, 2, 3 가져오기
System.out.println(Arrays.toString(temp));
}
실행결과:
[1, 2, 3]
Arrays.copyOf 메소드는 Arrays.copy(복사할 배열, 복사 요소 개수)로 역시 복사한 배열을 반환해주며, 복사할 요소의 개수(길이)만을 인자로 받기 때문에 앞에서 부터 길이에 맞게 복사 후 반환한다.