반응형
얕은 복사
- = 연산자를 사용해 주소를 연결함
- 같은 주소를 공유하기 때문에 a를 수정하게 되면 b도 수정됨
int[] a = {1, 2, 3};
int[] b = a;
- System.arraycopy
int[] arr1 = {10, 20, 30, 40, 50};
int[] arr2 = {1, 2, 3, 4, 5};
System.arraycopy(arr1, 0, arr2, 1, 3);
for(int i=0; i<arr2.length; i++) {
System.out.println(arr2[i]);
}
// 1 10 20 30 5
깊은 복사
- 배열의 내용만 복사
- 배열을 수정하더라도 원본 배열에 영향을 주지 않음
- for문 반복을 통한 복사
int[] a = {1, 2, 3};
int[] b = new int[a.length];
for (int i=0; i < a.length; i++) { b[i] = a[i]; }
- Object.clone()
// a의 내용을 b로 깊은 복사하는 가장 보편적인 방법
int[] a = {1, 2, 3};
int[] b = a.clone();
- Arrays.copyOf()
// 배열의 시작점~원하는 지점까지 선택해서 복사할 수 있다.
int[] a = {1, 2, 3};
int[] b = Arrays.copyOf(a, a.length);
- Arrays.copyOfRange()
// 지정한 범위 내의 배열을 복사한다.
int[] a = {1, 2, 3};
int[] b = Arrays.copyOfRange(a, 0, 2);
- System.arraycopy()
int[] a = {1, 2, 3};
int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
2차원 배열 복사
- 이중 for문 활용
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];
}
}
- System.arraycopy + for문
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++) {
System.arraycopy(a[i], 0, b[i], 0, a[0].length);
}