알고리즘/이론과 문법

[Java] 배열 clone() 매소드 deep copy

lipnus 2019. 3. 23. 17:12
반응형
1차원배열
public class Test {
public static void main(String[] args){

int[] a = {1,2,3,4,5};
int[] b = a;

a[0] = 100;

for(int num: b){
System.out.println(num);
}
}
}

결과 : 100, 2, 3


int[] b = a.clone();

이렇게 바꾸면 결과가 1,2,3으로 나온다.

1차원 배열에서는 clone매소드를 사용하면 deep copy가 된다.







2차원배열

public class Test {

static int[][] map;

public static void main(String[] args){
map = new int[3][3];

for(int i=1; i<3; i++){
for(int j=1; j<3; j++){
map[i][j] = 1;
}
}

int[][] map2 = map.clone();

for(int i=1; i<3; i++){
for(int j=1; j<3; j++){
map2[i][j] = 2;
}
}

System.out.println("[Map1]");
print(map2);

System.out.println("[Map2]");
print(map);



}

static void print(int[][] map){
for(int i=1; i<3; i++){
for(int j=1; j<3; j++){
System.out.printf("%d ", map[i][j]);
}
System.out.println();
}
}
}


결과

[Map1]

2 2 

2 2 


[Map2]

2 2 

2 2



2차원 이상 배열을 다룰 때 DeepCopy하려면

static int[][] deepCopy(int[][] map){
int[][] map2 = new int[N+1][N+1];
for(int i=1; i<=N; i++){
for(int j=1; j<=N; j++){
map2[i][j] = map[i][j];
}
}
return map2;
}

 

반응형

'알고리즘 > 이론과 문법' 카테고리의 다른 글

백트래킹  (0) 2019.03.31
Integer 객체 비교  (0) 2019.03.23
정렬알고리즘 속도  (0) 2019.03.21
Stable & Unstable Sort (안정정렬, 불안정정렬)  (0) 2019.03.21
Union & Find  (0) 2019.02.28