public class ArrayCopyTest {
/* 배열복사, 함수내 변경 총정리 */
public static void main(String[] args) {
//1) 1차원 배열 대입(참조에 의한 복사)
System.out.print("1) ");
int[] a = {1,2,3,4,5,6,7};
int[] b = a; //참조에 의한 복사
a[1] = 9; //a의 변경이 b배열에도 연관되는지 확인
for(int i : b)
System.out.print(i +" "); //1 9 3 4 5 6 7 바뀐다(두번째값 2 -> 9)
a[1] = 2;//되돌리기
System.out.println();
//2) 1차원 배열 clone(값에 의한 복사) !주의! 2차원 배열의 clone은 참조에 의한 복사 임
System.out.print("2) ");
int[] c = a.clone();
a[1] = 9; //a의 변경이 c배열에도 연관되는지 확인
for(int i : c)
System.out.print(i +" "); //1 2 3 4 5 6 7 바뀌지 않는다!
a[1] = 2;//되돌리기
System.out.println();
//3) 1차원 배열 System.arraycopy에 의한 복사(값에 의한 복사)
System.out.print("3) ");
int[] d = new int[a.length];
System.arraycopy(a, 0, d, 0, a.length);
a[1] = 9; //a의 변경이 d배열에도 연관되는지 확인
for(int i : d)
System.out.print(i +" "); //1 2 3 4 5 6 7 바뀌지 않는다!
a[1] = 2;//되돌리기
System.out.println();
// 4) 1차원 배열 함수내에서 값 변경(참조에 의한 복사/변경)
System.out.print("4) ");
change1arr(a);
for(int i : a)
System.out.print(i +" "); //1 8 3 4 5 6 7 바뀐다! (두번째값 2 -> 8)
a[1] = 2;//되돌리기
System.out.println();
// 5) 2차원 배열의 대입(참조에의한 복사)
System.out.print("5) ");
int[][] aa = {{1,2,3},{4,5,6,}};
int[][] bb = aa;
aa[0][1] = 0;
print2arr(bb); //1 0 3 4 5 6 바뀐다! 두번째값 2 -> 0)
aa[0][1] = 2; //되돌리기
System.out.println();
// 6) 2차원 배열의 clone (참조에 의한 복사)
System.out.print("6) ");
int[][] cc = aa.clone();
aa[0][1] = 7;
print2arr(cc); //1 0 3 4 5 6 바뀐다! 두번째값 2 -> 7)
aa[0][1] = 2; //되돌리기
System.out.println();
// 7) 2차원 배열 System.arraycopy에 의한 복사1(1차원 배열통해 값에 의한 복사)
System.out.print("7) ");
int[][] dd = new int[aa.length][aa[0].length];
for(int i = 0; i < aa.length; i++){
System.arraycopy(aa[i], 0, dd[i], 0, aa[i].length);
}
aa[0][1] = 9;
print2arr(dd); //값이 바뀌지 않는다
aa[0][1] = 2; //되돌리기
System.out.println();
// 8) 2차원 배열 System.arraycopy에 의한 복사1(2차원 배열통해 참조에 의한 복사)
System.out.print("8) ");
int[][] ee = new int[aa.length][aa[0].length];
System.arraycopy(aa, 0, ee, 0, aa.length);
aa[0][1] = 9;
print2arr(ee); //값이 바뀐다
aa[0][1] = 2; //되돌리기
System.out.println();
// 9) 2차원 배열의 함수내에서 값 변경(참조에 의한 복사/변경)
System.out.print("9) ");
change2arr(aa);
print2arr(aa); //1 4 3 4 5 6 바뀐다! 두번째값 2 -> 4
aa[0][1] = 2; //되돌리기
System.out.println();
// 10) 2차원 배열의 함수내에서 값 변경. 특히 함수내에서 1차원 배열 이용하여 각 행별 열값들 교환하여 변경(참조에 의한 복사/변경)
System.out.print("10) ");
change2arr2(aa, 0, 1);
print2arr(aa);
System.out.println();
change2arr2(aa, 0, 1); //되돌리기
//print2arr(aa);
System.out.println();
}
static void change1arr(int[] p){
p[1] = 8; //함수내에서 값변경이 원래 함수에 영향 미치는지 확인
}
static void change2arr(int[][] p){
p[0][1] = 4;
}
static void change2arr2(int[][] p, int s, int e){
int[] tmp = new int[3]; //각 행의 열의 값이 바뀌는지 보기위함
//s행의 열들의 값과 e행의 열들의 값을 모두 바꿈
tmp = p[s];
p[s] = p[e];
p[e] = tmp;
}
static void print2arr(int[][] q){
for(int i = 0; i < q.length; i++){
for(int j = 0; j < q[0].length; j++){
System.out.print(q[i][j]+" ");
}
}
}
}
/*
출력 결과
1) 1 9 3 4 5 6 7
2) 1 2 3 4 5 6 7
3) 1 2 3 4 5 6 7
4) 1 8 3 4 5 6 7
5) 1 0 3 4 5 6
6) 1 7 3 4 5 6
7) 1 2 3 4 5 6
8) 1 9 3 4 5 6
9) 1 4 3 4 5 6
10) 4 5 6 1 2 3
*/
'Java & JSP' 카테고리의 다른 글
ajax 로 한글 값 전송시 깨짐 처리 (0) | 2020.04.04 |
---|---|
1의 보수, 2의 보수 활용한 비트 연산 (0) | 2017.03.07 |
ArrayList에서 특정값 remove (0) | 2016.05.21 |
Arrays.copyOf , Arrays.copyOfRange 배열 복사 (0) | 2016.03.15 |
2차원 배열 가지고 놀기 (0) | 2015.03.06 |
댓글