본문 바로가기

Java

[Java] 배열 복사하는 방법 ( feat. System.arraycopy() & Arrays.copyOf() )

728x90

 

 

배열을 복사하는 방법은 크게 2가지가 있다.

1.   System.arraycopy(  복사할 배열 원본,  시작 위치,  복사 당할 배열,  시작 위치,  복사할 개수  )

int[] test = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] copied = new int[5];

System.arraycopy(test, 0, copied, 0, 5);
System.out.println(Arrays.toString(copied));   // [ 1, 2, 3, 4, 5 ]

System.arraycopy( )복사를 시작할 위치복사할 개수를 매개변수로 지정한다. 

2 - 1.  Arrays.copyOf(  복사할 배열 원본,  복사할 개수  )

int[] test = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] copied = Arrays.copyOf(test, 5);

System.out.println(Arrays.toString(copied));  //  [ 1, 2, 3, 4, 5 ]

2 - 2.  Arrays.copyOfRange(  복사할 배열 원본,  시작 인덱스,  끝 인덱스(포함x)  )

int[] test = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] copied = Arrays.copyOfRange(test, 0, 5);
int[] copied2 = Arrays.copyOfRange(test, 2, 5);

System.out.println(Arrays.toString(copied));  //  [ 1, 2, 3, 4, 5 ]
System.out.println(Arrays.toString(copied2));  //  [ 3, 4, 5 ]

Arrays.copyOf( ) 의 경우는 시작 위치가 인덱스 0 으로 고정되어 매개변수엔 복사할 원소의 개수를 기입한다. 반면 Arrays.copyOfRange( )시작 인덱스복사를 끝내는 지점을 매개변수에 지정할 수 있다. 이때 끝 인덱스는 포함되지 않는다.

 

-  System.arraycopy( ) 와 Arrays.copyOf( ) 메서드의 차이는 새로운 배열 생성의 여부에 있다. System.arraycopy( ) 는 이미 만들어진 배열을 가지고 와서 복사한다. 반면 Arrays.copyOf( ) 메서드는 복사한 새로운 배열을 만들기 때문에 새로운 배열 변수를 선언해줘야 한다.