java/java

[Java] 배열의 복사

danuri 2021. 6. 23. 11:00

자바에서 배열을 복사할 때, for문을 사용해 일일이 복사해도 되지만, System.arraycopy()를 사용하면 보다 간단하고 빠르게 배열을 복사할 수 있다.

 

for문은 배열의 요소 하나하나에 접근해서 복사하지만, arraycopy()는 지정된 범위의 값들을 한 번에 통째로 복사한다. 각 요소들이 연속적으로 저장되어 있다는 배열의 특성 때문에 이렇게 처리하는 것이 가능한 것이다.

-> 배열의 복사는 for문보다 System.arraycopy()를 사용하는 것이 효율적이다.

 

for문을통한 배열의 복사를 arraycopy()로 바꾸면 다음과 같다.

//for문
for(int i = 0; i < num.length; i++) { newNum[i] = num[i]; }

//arraycopy()
System.arraycopy(num, 0, newNum, 0, num.length);

arraycopy()를 호출할 때는 어느 배열(1)몇 번째 요소(2)에서 어느 배열(3)몇 번째 요소(4)몇 개의 값(5)을 복사할 것인지 지정해줘야 하는데, 다음과 같이 생각하면 이해가 쉽다.

이 때, 복사하려는 배열의 위치가 적절하지 못하여 복사하려는 내용보다 여유 공간이 적으면 ArrayIndexOutOfBoundException 에러가 발생한다.