我想复制一大堆整数值,例如将数组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 :(得分:8)
System.arraycopy 是更好的方式。
原因:它通过本机代码实现,因此效率更高。 Josh Bloch 建议(在Effective Java中)避免使用 clone()方法来复制/克隆对象。
答案 1 :(得分:2)
System.arraycopy(a,0,b,0,a.length);是一个很好的优化函数,如果你构建一个新对象,执行会更慢..
答案 2 :(得分:2)
是的,每个人都说arraycopy()
更好,但是大多数人都倾向于忘记Dalvik VM 而不是 Oracle VM,他们链接到的源是指Oracle VM。我的猜测也是arraycopy()
会更快。
<强>然而强>
如果你真的,真的需要这个副本进行最优化,只需要两种方法,看看它们的表现如何。如果你真的想知道真正的答案,这总是要走的路。特别是在您要定位的设备上执行此操作,因为它可能会因设备与另一台设备的行为而异乎寻常。
答案 3 :(得分:1)
System.arraycopy
是本机实现,比克隆更有效。它可以在单memorycopy
(memcpy)中复制数组。
在维基百科上发表文章 - java cloning disadvantage and alternative
答案 4 :(得分:0)
我认为这是制作数组副本的最佳方法
int[] b = Arrays.copyOf(a, a.length);