2013-02-06 1 views
2

정수 배열의 큰 배열을 복사하려는 경우 양식 배열 a을 배열 b에 복사합니다. 나는 몇 가지 방법을 포함하여,이 일을 발견 :자바에서 큰 배열의 복사본을 만드는 가장 효율적인 방법

int[] a = new int[]{1,2,3,4,5}; 
int[] b = new int[5]; 

System.arraycopy(a, 0, b, 0, a.length); 

int[] a = new int[]{1,2,3,4,5}; 
int[] b = (int[])a.clone(); 

를이는 내가 가장 효율적으로 할 수 있도록하려면 모바일 장치에서 이루어지기 때문에.

이 작업을 수행하는 가장 좋은 방법을 알려주십시오.

+0

arraycopy이의이 Arrays.copyOf을 잊지 말자 –

+0

최선의 선택입니다 배열의 복사본을 만들 수있는 가장 좋은 방법이라고 생각합니다. http://stackoverflow.com/questions/12157300/clone-or-arrays-copyof – jdb

+0

@jdb 위험합니다. 이전 Android API에서는 사용할 수 없습니다. API 8. – andr

답변

7

System.arraycopy이 더 좋습니다.

이유 : 네이티브 코드를 통해 구현되므로 더욱 효율적입니다. Josh Bloch은 (객체를 복사/복제하는) 복제() 메서드를 사용하지 않는 것이 좋습니다 (Effective Java에서).

Pls는이를 참조하십시오 Effective Java: Analysis of the clone() method

+0

http://mobile.dzone.com/news/android-quick-tip-use – wojciii

+1

@wojci 사과와 오렌지 - 이것은 arraycopy()와 모든 순회 반복을 통한 * 순진 * 복사 사이의 비교입니다 요소 - 이것은'clone()'과 같은 것이 아니다. – andr

2

System.arraycopy에 (A, 0, B, 0, a.length을); 멋진 최적화 기능을 사용하면 새로운 객체를 만들 경우, 실행이 .. 느린 것입니다

그래, 모두가 arraycopy() 더 나은,하지만 대부분의 사람들은 달빅 VM임을 잊지하는 경향이 말하는
2

하지 오라클 VM 및 링크 된 소스는 Oracle VM을 참조합니다. 내 생각 엔 arraycopy()이 빠를 것입니다.

은 그러나 당신이 정말로, 정말로이 사본이 필요한 경우

가장 단지 시간이 두 방법와 그들이 수행하는 방법을 참조 최적화합니다. 진짜 대답을 알고 싶다면 항상가는 길입니다. 특히 장치마다 크게 다르게 동작 할 수 있으므로 대상 장치에서 수행하십시오.

0

나는이

int[] b = Arrays.copyOf(a, a.length); 
+0

'Arrays.copyOf()'가 나중에 API에 추가되었다는 것을 알아 두십시오. 예를 들어 API 8에서는 사용할 수 없습니다. – andr

관련 문제