본문 바로가기
JAVA

[JAVA] ArrayCopy(배열복사)

by 주옹스 2020. 7. 31.

배열의 주소 복사

(= a와 b가 참조하는 위치가 같다.) 

    

         a의 메모리 할당 : a배열의 주소가 저장 

           int []a = {10,20,30};    -->   a 메모리 할당  ex) a:  0x100
           int []b;                        -->   b 메모리 할당 받지 않음      ex) b: 쓰레기값 
           b=a;                             -->   a배열 주소값을 b에 복사    ex) b:  0x100    

           b[1] =200;                  -->   a:200, b:200

 

 

 

 

 

 

배열의 값 복사

 

           int []a= new int[]{10,20,30};  --> a 메모리 할당    ex) a : 0x100

           int []b = new int[a.length];     --> b 메모리 할당   ex) b : 0x200

           //a배열의 값을 b배열에 복사
          for(int i = 0; i<a.length; i++)
                 b[i]=a[i];

 

       

 

System.arraycopy 메소드 이용한 복사 (1차원배열)

System.arraycopy 형식

 

 

     

System.arraycopy 예제

 

 

 

- 1차원 배열 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package ex0731;
 
public class Array_CopyMethod {
    public static void main(String[] args) {
        
        
        int []a= new int[]{10,20,30}; //배열에서 초기값 생략은 초기값을 설정할 때!
        int []b = new int[a.length];
    
        //a배열의 값을 b배열에 값 복사
        System.arraycopy(a, 0, b, 0, a.length); //원본,복사하고싶은 시작위치,복사대상,복사대상에 어디서부터 넣을지,몇개복사할건지
        
        System.out.print("a 배열: ");
        for(int n :a) {
            System.out.print(n+" ");
        }
        System.out.println();
        
        System.out.print("b 배열: ");
        for(int n : b) {
            System.out.print(n+" ");
        }
        System.out.println();
    }
}
 
cs

 

 

 

 

 

System.arraycopy 메소드 이용한 복사 (2차원배열)

* 2차원 arraycopy 주의 할 점  " 9번 line "

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package ex0731;
 
public class Array2d_Copy_Ex1 {
    public static void main(String[] args) {
        
        int [][]a = {{10,20,30},{40,50,60}};
        int [][]b = new int[a.length][a[0].length];
        
        System.arraycopy(a, 0, b, 0, a.length);
        //2차원배열에서 arraycopy를 하면 주소(2개)가 복사됨.
        
        
        
        //출력
        System.out.print("a 배열: ");
        for(int i = 0; i<a.length; i++) {
            for(int j = 0; j<a[i].length; j++)
                System.out.print(a[i][j]+" ");
        }
        System.out.println();
        
        System.out.print("b 배열: ");
        for(int i = 0; i<b.length; i++) {
            for(int j = 0; j<b[i].length; j++)
                System.out.print(b[i][j]+" ");
        }
        System.out.println();
        
        
        
        
        b[1][1= 200;
        System.out.println(a[1][1]+","+b[1][1]); //200,200
        //2차원 배열은 복사시 얇은 복사가 된다.
        
    }
}
 
cs

 

 

arraycopy로 이차원배열의 값만 복사하고 싶을 때, 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package ex0731;
 
public class Array2d_Copy_Ex2 {
    public static void main(String[] args) {
        
        int [][]a = {{10,20,30},{40,50,60}};
        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[i].length);    
        }
        
        
        //출력
        System.out.print("a 배열: ");
        for(int i = 0; i<a.length; i++) {
            for(int j = 0; j<a[i].length; j++)
                System.out.print(a[i][j]+" ");
        }
        System.out.println();
        
        System.out.print("b 배열: ");
        for(int i = 0; i<b.length; i++) {
            for(int j = 0; j<b[i].length; j++)
                System.out.print(b[i][j]+" ");
        }
        System.out.println();
        
        
        
        
        b[1][1= 200;
        System.out.println(a[1][1]+","+b[1][1]); // 50,200
        //2차원 배열은 복사시 얇은 복사가 된다.
    }
}
 
cs

'JAVA' 카테고리의 다른 글

[JAVA] 객체지향  (0) 2020.07.31
[JAVA] 명령 행 인수  (0) 2020.07.31
[JAVA] TwoDimensionArray(2차원배열)  (0) 2020.07.30
[JAVA] Sort(정렬)  (0) 2020.07.30
[JAVA] OneDimensionArray(1차원배열)  (0) 2020.07.29