728x90
배열 복사 - deep copy - System.arraycopy()
System.arraycopy()
System.arraycopy(src, srcPos, dest, destPos, length)
src : 원본 배열
srcPos : 포지션. 원본배열에서 복사를 시작할 위치
dest : 복사 배열
destpos: 복사 배열에서 붙여놓기를 시작할 위치
length : 얼만큼 복사를 해올지에 대한 복사 길이
int[] sourceArr = {10,20,30};
int[] copyArr = new int[6];
System.arraycopy(sourcArr, 0 , copyArr, 0, 3);
배열길이 자동 수정x
복사된 값의 나머지 공간은 해당 배열의 데이터 타입의 기본값으로 채워진다
ex)
int 배열값을 복사하고 나머지 공간은 0으로 채워진다
double 배열값을 복사하고 나머지 공간은 0.0
char 배열값을 복사하고 나머지 공간은 공백
String 배열값을 복사하고 나머지 공간은 null
// 방법2:System.array.copy()
// 배열길이 자동 수정x
// int 배열값을 복사하고 나머지 공간은 0으로 채워진다
// double 배열값을 복사하고 나머지 공간은 0.0
// char 배열값을 복사하고 나머지 공간은 공백
// String 배열값ㅇ르 복사하고 나머지 공간은 null
//
// System.arraycopy(src, srcPos, dest, destPos, length)
// src : 원본 배열
// srcPos : 포지션. 원본배열에서 복사를 시작할 위치
// dest : 복사 배열
// destpos: 복사 배열에서 붙여놓기를 시작할 위치
// length : 얼만큼 복사를 해올지에 대한 복사 길이
int[] sourceArr3 = {10,20,30};
int[] cloneArr3 = new int[3];
System.arraycopy(sourceArr3, 0, cloneArr3, 0, cloneArr3.length);
System.out.println(sourceArr3);
for(int i=0;i<sourceArr3.length;i++) {
System.out.print(sourceArr3[i]+" "); // 10 20 30
} // 원본 값
System.out.println();
for(int i=0;i<cloneArr3.length;i++) {
System.out.print(cloneArr3[i]+" "); // 10 20 30
} // 클론 값
System.out.println();
int[] sourceArr4 = {10,20,30,40,50};
int[] cloneArr4 = new int[3];
System.arraycopy(sourceArr4, 0, cloneArr4, 0, cloneArr4.length);
// 원본 인덱스0번부터4번까지 배열값 복사해서 복제본의 0번째 인덱스부터 붙여넣는다는 의미
for(int i=0;i<sourceArr4.length;i++) {
System.out.print(sourceArr4[i]+" ");// 10 20 30 40 50
} // 원본값
System.out.println();
for(int i=0;i<cloneArr4.length;i++) {
System.out.print(cloneArr4[i]+" "); // 10 20 30
} // 클론값
//
System.out.println();
System.arraycopy(sourceArr4, 2, cloneArr4, 0, cloneArr4.length);
// 원본 인덱스2번부터4번까지 30 40 50의 배열값 복사해서 복제본의 0번째 인덱스부터 붙여넣는다는 의미
for(int i=0;i<sourceArr4.length;i++) {
System.out.print(sourceArr4[i]+" ");// 10 20 30 40 50
} // 원본값
System.out.println();
for(int i=0;i<cloneArr4.length;i++) {
System.out.print(cloneArr4[i]+" "); // 30 40 50
} // 클론값
//
System.out.println();
int[] a = {2,4,6,8,10};
int[] b = new int [10];
System.arraycopy(a, 3, b, 0, 2);
// dest의 범위가 0-5까지는 잘나오고 6부터 error
for(int i=0; i<a.length;i++) {
System.out.print(a[i]+" "); // 2 4 6 8 10
} // 원본값
System.out.println();
for(int i=0; i<b.length;i++) {
System.out.print(b[i]+" "); // 8 10 0 0 0 0 0 0 0 0
} // 카피값
System.out.println();
// int 배열
int[] src = {3,6,9,12};
int[] clone = new int[8];
System.arraycopy(src, 2, clone, 6, 2);
// src 2번인덱스부터 길이2를 복사해서 9,12값을 clone의 6번째부터 복사
for(int i=0; i<src.length;i++) {
System.out.print(src[i]+" "); // 3 6 9 12
} // 원본값
System.out.println();
for(int i=0; i<clone.length;i++) {
System.out.print(clone[i]+" ");// 0 0 0 0 0 0 9 12
} // 카피값
System.out.println();
int[] src2 = {3,6,9,12};
int[] clone2 = new int[8];
System.arraycopy(src2, 2, clone2, 5, 2);
for(int i=0; i<clone2.length;i++) {
System.out.print(clone2[i]+" ");// 0 0 0 0 0 9 12 0
} // 복사되고 int배열의 공백은 0으로 채워진다 // 카피값
System.out.println();
// double 배열
double[] dSrc = {1.0,1.5,2.0,2.5};
double[] dCopy = new double[8];
System.arraycopy(dSrc, 0, dCopy, 4, dSrc.length);
for(int i=0;i<dCopy.length;i++) {
System.out.print(dCopy[i]+" ");//0.0 0.0 0.0 0.0 1.0 1.5 2.0 2.5
} // 복사된 값 외에 나머지 공간 : 0.0
System.out.println();
// char 배열
char[] cSrc = {'a','b','c'};
char[] cCopy = new char[6];
System.arraycopy(cSrc, 0, cCopy, 0, cSrc.length);
for(int i=0;i<cCopy.length;i++) {
System.out.print(cCopy[i]+" ");//a b c (공백)
} // // 복사된 값 외에 나머지 공간 : 공백
System.out.println();
// String 배열
String[] sSrc = {"A","B","C"};
String[] sCopy = new String[6];
System.arraycopy(sSrc, 0, sCopy, 0, sSrc.length);
for(int i=0;i<sCopy.length;i++) {
System.out.print(sCopy[i]+" ");// A B C null null null
} // 복사된 값 외에 나머지 공간 : null
System.out.println();
728x90
반응형
'small steps > 1일 1코딩 - 코딩을 내 몸처럼' 카테고리의 다른 글
[1일1코딩] [Java] 배열 복사-깊은복사-System.arraycopy(), Arrays.copyOf() 복습2 (0) | 2022.03.13 |
---|---|
[1일1코딩] [SQL][Oracle] 오답 및 햇갈리는 문제들 재차 복습 (0) | 2022.03.13 |
[1일1코딩] [Java] 배열 복습 : 배열 복사 - shallow copy, deep copy (0) | 2022.03.11 |
[1일1코딩][Java] 배열 복습 : 선언, 할당, 초기화, 삭제 (0) | 2022.03.10 |
[1일1코딩] [Java] List - ArrayList (0) | 2022.03.09 |