2010-11-20 3 views
1

나는 자바에서 함수에 배열을 전달할 때 원래 배열을 수정한다는 것을 알아 차렸다. 재귀를 사용하는 백 트랙킹 메서드를 구현하려고하는데 전달 된 배열의 내용을 복사하는 자체 배열을 각 호출에 전달하려고합니다.배열과 arraylists를 복사하는 효율적인 방법은 무엇입니까?

예를 들어 원래 배열이 있고 함수를 호출하는 루프. 각 호출은 원래 배열의 모든 내용을 포함하는 배열을 갖기를 원하지만 원래의 배열을 수정하지 않고 수정 된 내용은 그 자체로 유지됩니다. 이것이 가능한가?

해결책이있는 경우 arraylists도 가능합니까?

+1

배열의 내용이 동일한 객체를 참조하도록 배열을 복사하는지 또는 배열의 내부에있는 객체를 실제로 복사할지 묻는 것은 나에게 불분명합니다. 당신이 이전을 의미한다면, 찬드라의 대답이 올바른 것입니다. 그러나 배열 자체의 객체를 실제로 수정하지 않으려면 Clone을 피하는 것이 좋습니다. 대신 객체를 변경할 수 없도록해야하므로 수정을 통해 새 인스턴스가 만들어집니다. –

+0

check http://stackoverflow.com/questions/2589741/how-to-effectively-copy-an-array-in-java –

답변

5

Arrays.copyOf 방법을 사용할 수 있습니다.

+2

그리고 arraylist를 복제 할 수 있습니다. – Tom

+0

이 작업을 수행하는 데 비용이 많이 드는 방법이라고 가정합니다. 재귀 메소드를 갖고 싶지만 각 호출마다 자체 배열이 있으면 매번 새로운 배열을 만드는 데 비용이 덜 드는 또 다른 방법이 있을까요? – sudo

+1

@ sudo : 그래서 복사하지 않고 배열을 복사 하시겠습니까? – SimonJ

2

아마도 Java에서이 작업을 수행하는 가장 빠른 방법은 System.arraycopy 방법 documented here 일 것입니다. 그것은 네이티브 메소드이고 일반적으로 당신이 얻는 것만큼 빠릅니다.

경우에 따라 전체 배열을 실제로 수정하지 않는 경우 도움이 될 수있는 copy-on-write 방식을 시도 할 수 있습니다.

+1

Arrays.copyOf는 System.arraycopy를 사용하고 목적지 배열 생성을 담당하므로 미리 존재하는 대상이 없다면 Arrays.copyOf를 사용하는 노력이 줄어 듭니다. 1.6 – earcam

관련 문제