[Java] 2차원 배열 복사
May 04, 2024
깊은 복사를 이용하여 2차원 배열을 복사하는 방법에 대해서 알아보겠습니다.
1. Arrays.copyOf()를 이용한 방법
Arrays.copyOf(array, n)
은 array 배열의 Index 0부터 n개 까지 복사한 배열을 만들어서 리턴합니다.
따라서, 아래와 같이 for문을 이용하여 2차원 배열을 복사할 수 있습니다.
Arrays.copyOf(originalArray[i], numCols)
: 2차원 배열의 행(row) 복사- for문으로 모든 행(row) 복사
- 깊은 복사를 하였기 때문에, 원본 배열의 값을 변경해도 복사된 배열에 영향을 주지 않음
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int numRows = originalArray.length;
int numCols = originalArray[0].length;
// 배열 복사
int[][] copiedArray = new int[numRows][numCols];
for (int i = 0; i < numRows; i++) {
copiedArray[i] = Arrays.copyOf(originalArray[i], numCols);
}
// 복사된 배열 확인
for (int[] row : copiedArray) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
Output:
1 2 3
4 5 6
7 8 9
2. System.arraycopy()를 이용한 방법
System.arraycopy(src, srcIndex, des, desIndex, length)
는 src 배열의 srcIndex에서 length 개수만큼의 값들을 des 배열의 desIndex부터 (desIndex + length -1) 인덱스까지 복사합니다.
System.arraycopy(originalArray[i], 0, copiedArray[i], 0, numCols)
: 배열의 행(row) 복사- for문으로 모든 행(row) 복사
- 깊은 복사
public class Example {
public static void main(String[] args) {
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int numRows = originalArray.length;
int numCols = originalArray[0].length;
// 배열 복사
int[][] copiedArray = new int[numRows][numCols];
for (int i = 0; i < numRows; i++) {
System.arraycopy(originalArray[i], 0, copiedArray[i], 0, numCols);
}
// 복사된 배열 확인
for (int[] row : copiedArray) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
Output:
1 2 3
4 5 6
7 8 9
3. for문을 이용한 방법
아래와 같이 2중 for문을 사용하여 직접 2차원 배열을 복사할 수 있습니다.
- 2중 for문으로 모든 값 복사
- 깊은 복사
public class Example {
public static void main(String[] args) {
int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int numRows = originalArray.length;
int numCols = originalArray[0].length;
// 배열 복사
int[][] copiedArray = new int[numRows][numCols];
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
copiedArray[i][j] = originalArray[i][j];
}
}
// 복사된 배열 확인
for (int[] row : copiedArray) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
Output:
1 2 3
4 5 6
7 8 9