반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 익명클래스
- 다이나믹 프로그래밍
- BFS
- 현대오토에버 코딩테스트
- 데이터베이스
- 자바
- 네트워크
- 프로그래머스
- backjoon
- 백준
- 백준 알고리즘
- CKLU
- 알고리즘
- 삼성SW테스트
- dfs
- 재귀함수
- 언더라이터
- Android
- 안드로이드
- dp
- 익명객체
- 멀티스레드
- 너비탐색
- 조합
- Java
- 삼성sw문제
- 모바일
- IT
- 개발
- 금융IT
Archives
- Today
- Total
Limky 삽질블로그
[JAVA] JAVA 1차원 배열, 2차원 배열 깊은복사 본문
반응형
이번시간에는 배열복사에 대해서 알아보겠습니다.
복사엔 깊은복사, 얕은복사 이렇게 2개가 있습니다.
얕은복사는 복사된 배열이나, 원본배열이 변경될 때, 함께 변경됩니다.
깊은복사는 완벽하게 2개의 배열은 따로 존재한 지정한 의미에 복사입니다.
일반적으로 = 연산자는 얕은복사입니다.
얕은복사는 주소값을 복사하기 때문에 주소로 값을 참조하여 값이 변경되면 해당 값을 참조하고 있는 배열들의 값이 변경되는 것이지요..
하지만, 깊은복사는 주소값을 참조하는것이 아닌, 새로운 메모리공간에 값을 복사하는 것이기 때문에 원본 배열이 변경되어도 복사된 배열에 전혀 상관이 없습니다.
그렇다면 깊은복사를 어떻게 할까요?
1차원배열에 경우 간단하게 array.clone() 함수를 쓰면 됩니다.
하지만 2차원 배열에 경우 array.clone() 함수를 써도, 깊은복사가 되지 않습니다.
따라서, 따로 함수를 작성해줘야합니다.
package COMMON;
public class ArrayCopy {
public static void main(String[] args) {
int[] original1 = new int[5];
int[] copyArray1 = original1.clone();
copyArray1[1] = 1;
copyArray1[3] = 3;
System.out.println("original1 : ");
for(int i=0; i<5; i++)
System.out.print(original1[i]+" ");
System.out.println();
System.out.println("copyArray1 : ");
for(int i=0; i<5; i++)
System.out.print(copyArray1[i]+" ");
System.out.println();
int[][] original2 = new int[5][5];
int[][] copyArray2 = deepCopy(original2);
copyArray2[1][0] = 1;
copyArray2[2][0] = 1;
copyArray2[3][1] = 1;
copyArray2[3][2] = 1;
System.out.println("original2 : ");
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
System.out.print(original2[i][j]+" ");
}
System.out.println();
}
System.out.println("copyArray2 : ");
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
System.out.print(copyArray2[i][j]+" ");
}
System.out.println();
}
}
private static int[][] deepCopy(int[][] original2) {
if(original2 == null) return null;
int[][] result = new int[original2.length][original2[0].length];
for(int i=0; i<original2.length; i++){
System.arraycopy(original2[i], 0, result[i], 0, original2[0].length);
}
return result;
}
}
결과
original1 :
0 0 0 0 0
copyArray1 :
0 1 0 3 0
original2 :
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
copyArray2 :
0 0 0 0 0
1 0 0 0 0
1 0 0 0 0
0 1 1 0 0
0 0 0 0 0
반응형
'프로그래밍 > Java' 카테고리의 다른 글
| [JAVA] 자바 추상클래스란? (66) | 2019.05.08 |
|---|---|
| [JAVA] 조합,중복조합,순열,중복순열 소스 (1) | 2019.03.23 |
| [Java] 자바 표준 입출력 (nextInt, nextLine 등) 주의사항 (0) | 2018.12.05 |
| [String] == VS equals 문자열 비교 (1) | 2017.12.27 |
| [Java] String vs StringBuffer vs StringBuilder (0) | 2017.10.26 |