2013-02-06 20 views
2

我想复制大型整数值数组,例如表单数组a到数组b。我已经找到了几个方法可以做到这一点,包括:在java中制作大型数组的副本的最有效方法

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是最好的选择 –

+0

让我们不要忘记Arrays.copyOf的最佳途径。 http://stackoverflow.com/questions/12157300/clone-or-arrays-copyof – jdb

+0

@jdb它有风险 - 它在早期的Android API中不可用,例如。 API 8. – andr

回答

7

System.arraycopy是更好的方法。

原因:它通过本地代码实现,所以它更高效。 Josh Bloch建议(在Effective Java中)避免使用clone()方法来复制/克隆一个对象。

请参照本: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);是一个很好的优化功能,如果你建立一个新的对象,执行会比较慢..

2

是啊,每个人都在说,arraycopy()较好,但大多数人往往忘记了Dalvik虚拟机的Oracle VM和他们链接的来源是指Oracle VM。我的猜测也是arraycopy()会更快。

然而

如果你真的,真的需要这个副本最优化,只是时间两种方法,看看他们的表现如何。如果你真的想知道真正的答案,这总是一路走来。特别是在您定位的设备上执行此操作,因为它可能会因设备的不同而表现出极大的差异。

0

我认为这是使阵列的复制

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

只知道'Arrays.copyOf()'稍后添加到API中 - 例如,它在API 8中不可用。 – andr

相关问题