자바 다중 배열 복사 질문드립니다!
조회수 1677회
어제 문제를 풀다가 2차원 배열인 B배열에 2차원 배열인 A배열을 System.arraycopy로 복사하여 B의 내용값만 변경하도록 하고 싶었습니다.
하지만 B배열의 값을 바꾸면 A배열의 값도 바뀌게 되었고, 그로인해 애를 좀 먹었습니다. System.arraycopy로 2차원 배열을 복사하면 B배열이 A배열을 참조 하게 되는 것 같더라구요.
제가 원하는건 참조가 아닌 정말 배열의 값만을 복사하여 안에 내용이 변경되더라도 서로 영향을 주지않게 하고싶습니다. 서로 영향을 주지하고 배열을 복사하는 메소드가 자바에 존재하나요?
아니면 반복문을 사용하여 하나씩 값을 넣어주는 방법뿐인가요?
마지막으로 만약 메소드가 있다면 메소드 vs 반복문 속도의 차이는 얼마나 나는지 알고 싶습니다.
위 내용 중 잘못된 것이 있으면 알려주세요!
소스코드도 첨부합니다!
int[][] test = new int[][] {{1,1},{2,2},{3,3}};
int[][] test2 = new int[3][2];
System.arraycopy(test, 0, test2, 0, 3);
test2[0][0]++;
위와같이 하면 test2의 값이 test에도 영향을 끼칩니다.
설명과 해결방법을 알려주시면 감사하겠습니다!
1 답변
-
아래 질문에서도 언급했지만, arraycopy 매서드는 얕은 복사 메서드 입니다. 단순히 레퍼런스만 복사를 하죠. 외부 배열을 순회하시면서 내부 배열을 복사해야합니다.
아래 링크 참고하세요.
https://stackoverflow.com/questions/1564832/how-do-i-do-a-deep-copy-of-a-2d-array-in-java
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력