이번에는 배열의 복사에 대해서 알아보겠습니다
배열의 복사 방법은 2가지가 있는데
1. for 문을 사용해서 복사하는 방법
2. System 클래스의 arraycopy() 를 사용하는 방법
2가지가 있답니다.
먼저 for 문을 사용해서 복사하는 방법의 간단한 예제를 보도록 하겠습니다
int[] number = {1,2,3,4,5};
int[] newNumber = new int[10];
for(int i=0; i<number.length; i++) {
newNumber[i] = number[i];
}
for 문을 number 배열의 갯수만큼 반복하면서 newNumber 에 각각 값을 넣는 예제입니다.
newNumber[2] = 3 의 값이 들어가는 식이죠
근데 newNumber 배열은 10개 인데 number은 5개 입니다.
newNumber 배열의 나머지 공간에는 0 이 대입됩니다.
newNumber[10] = {1,2,3,4,5,0,0,0,0,0} 이렇게 됩니다.
이번에는 arraycopy() 방법을 사용해보록 하겠습니다
arraycopy 는 for 문을 사용하는것보다 훨씬 간단하게 복사할 수 있습니다.
그리고 arraycopy() 는 값만 복사하기 때문에 참조변수 배열인 경우에는 단지 주소값만을 복사할 뿐 참조변수가 가리키고 있는 객체를 복사하지는 않습니다.
예제)
System.arraycopy(arr1, 0, arr2, 1, 2);
=> arr1[0] 에서 arr2[1] 으로 2개의 데이터를 복사한다.
arr1[] = { '0', '1', '2', '3', '4' }
arr2[] = { 'A', 'B', 'C', 'D', 'E', 'F' }
이렇게 변수가 설정되어 있는 상태에서
System.arraycopy(arr1, 0, arr2, 0, 2); 실행하게 되면
arr2[] = { 'A', '0', '1', 'D', 'E', 'F' }
이렇게 바뀌게 됩니다.
대충 감이 좀 오시나요??
그런데!!!!
복사하려는 배열의 위치가 복사하려는 내용보다 여유공간이 적으면 에러가 발생합니다
ArrayIndexOutOfBoundsException 에러가 발생하므로 조심하도록 합시다.
간단한 문제를 1개 드릴테니 풀어보시길 바랍니다
char[] abc = { 'A', 'B', 'C', 'D', 'E' }
char[] god = { '6', '7', '8', '9', '0' }
변수는 2개 설정 되있다고 하고
abc[2] 에서 god[1] 으로 3개의 데이터를 복사를 해보는 코드를 작성해보시면 됩니다.
for문 arraycopy 2개중 맘에 드는걸로 하셔도 되고 전부 써보셔도 됩니다.
답은 밑에~~
10
9
8
7
6
5
4
3
2
1
-----------------정답-------------------------------------------------
for 문
for(int i=0; i<3; i++)
{
god[i+1] = abc[i+2];
}
----------------------------------------
arraycopy()
System.arraycopy(abc, 2, god, 1, 3);
이상으로 배열의 복사에 대해서 알아보았습니다.
'Java' 카테고리의 다른 글
[Java] 조건문에서 &와 && 차이점에 대하여 알아보기 (0) | 2019.01.19 |
---|---|
[Java] 객체와 클래스 (0) | 2019.01.12 |
[Java] 객체와 인스턴스 (0) | 2014.05.01 |
[Java] 배열 속성인 length (0) | 2014.01.05 |
[Java] charAt 에 대해서 (0) | 2014.01.04 |