성장일기

 코테 문제를 풀면서 배열이 복사할 필요가 있을 때 일일히 인덱스를 이용한 반복문으로 복사해 주었지만, 이미 구현되어있는 메소드를 이용하면 시간절약이 될 것 같아서 정리 해놓으려고 한다.

 

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)가 발생한다.

참고

 

[Java #9] 배열 복사 함수 arraycopy()

1. 배열의 복사 배열은 한번 생성하면 길이를 변경할 수 없다. 따라서 더 많은 저장공간이 필요하면 더 큰 새로운 배열을 만들어서 기존의 배열에 있는 요소들을 일일히 복사해야 한다.  for문을

heesangstudynote.tistory.com

 

 

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(복사할 배열, 복사 요소 개수)로 역시 복사한 배열을 반환해주며, 복사할 요소의 개수(길이)만을 인자로 받기 때문에 앞에서 부터 길이에 맞게 복사 후 반환한다.

공유하기

facebook twitter kakaoTalk kakaostory naver band