728x90
깊은 복사
1차원 배열의 깊은 복사의 경우 위에서 소개한 메서드를 사용하면 쉽게 복사가 가능함. 하지만 2차원 배열의 경우 위의 메서드를 활용해도 깊은 복사가 되지 않음.
그 이유는 위와 같은 2차원 배열의 구조 a[x][y]에서 배열을 복사하는 메서드를 사용하게 되면 y좌표를 가리키는 주소 값만 있는 a부분만 깊은 복사가 되고 값이 있는 a[x][y]는 깊은 복사가 되지 않음. 그렇기에 2차원 배열을 복사하기 위해서는 for문을 돌리면서 값이 있는 a[x][y]를 일일이 복사해주어야 함.
이중 for문 활용
public class Array_Copy{
public static void main(String[] args) {
int a[][] = {{1,2,3},{4,5,6,},{7,8,9}};
int[][] b = new int[a.length][a[0].length];
for(int i=0; i<a.length; i++) {
for(int j=0; j<a[i].length; j++) {
b[i][j] = a[i][j];
}
}
}
}
2차원 객체 배열의 복사를 할 경우 arraycopy나 clone을 이용해서 복사할 수가 없음. 그렇기에 이중 포문을 복사하시려면 이중 for문을 돌면서 값을 일일이 옮겨야함.
System.arraycopy 활용
public class Array_Copy{
public static void main(String[] args) {
int a[][] = {{1,2,3},{4,5,6,},{7,8,9}};
int b[][] = new int[a.length][a[0].length];
for(int i=0; i<b.length; i++){
System.arraycopy(a[i], 0, b[i], 0, a[0].length);
}
}
}
이중 for문이 싫으면 for문을 돌려 System.arraycopy 메서드를 이용해 2차원 배열을 복사할 수 있음. 1차원 배열을 2차원 배열의 row 길이만큼 복사함.
728x90