본문 바로가기
Java

[JAVA] 배열 복사(array copy)

by ejxousiva(ἐξουσία) 2022. 9. 15.
반응형

얕은 복사

  • = 연산자를 사용해 주소를 연결함
  • 같은 주소를 공유하기 때문에 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);
}