3

我想复制一个大的整数值数组,比如 form arraya到 array 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();

由于这是在移动设备上完成的,我希望能够最有效地完成它。

请告诉我最好的方法来做到这一点。

4

5 回答 5

9

System.arraycopy是更好的方法。

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

请参考:Effective Java: Analysis of the clone() method

于 2013-02-06T07:30:34.053 回答
2

System.arraycopy(a, 0, b, 0, a.length); 是一个很好的优化函数,如果你构建一个新对象,执行会更慢..

于 2013-02-06T07:32:02.553 回答
2

是的,每个人都说这arraycopy()更好,但大多数人倾向于忘记 Dalvik VM不是Oracle VM,并且他们链接到的来源指的是 Oracle VM。我的猜测也是arraycopy()会更快。

然而

如果您真的非常需要将此副本进行最优化,只需对这两种方法进行计时并查看它们的性能。如果您真的想知道真正的答案,那总是要走的路。尤其是在您的目标设备上执行此操作,因为它的行为可能会因设备而异。

于 2013-02-06T07:36:27.417 回答
2

我认为这是制作数组副本的最佳方式

int[] b = Arrays.copyOf(a, a.length);
于 2013-02-06T07:42:34.093 回答
1

System.arraycopy 是本机实现,比克隆更高效。memorycopy它可以在单个(memcpy)中复制数组。

在维基百科上找到一篇文章 - java 克隆的缺点和替代方案

于 2013-02-06T07:31:10.280 回答