简单的问题,在Java中复制双精度数组的最快方法是什么。我现在这样做......
public static double[] clone_doubles(double[] from)
{
double[] to = new double[from.length];
for (int i = 0; i < from.length; i++) to[i] = from[i];
return to;
}
也进行分配以避免溢出,但如果有更快的方法,我会将分配与副本分开。
我看过Arrays.copyOf()
和System.arraycopy()
,但我想知道是否有人有任何巧妙的技巧。
修改
如何复制double[][]
?
答案 0 :(得分:13)
Java Practices did a comparison of different copy methods on arrays of int
:
以下是其网站的结果:
java -cp。 -Xint ArrayCopier性能250000
使用克隆:93毫秒
使用System.arraycopy:110毫秒
使用Arrays.copyOf:187毫秒
使用for循环:422 ms
我认为System.arraycopy()
和clone()
之间存在联系。
答案 1 :(得分:7)
System.arraycopy
可能是您最好的选择。
否则
public static double[] clone_doubles(double[] from) {
return (double[]) from.clone();
}
会给你一个克隆。
答案 2 :(得分:1)
System.arraycopy()是你最好的选择。通常,它使用本机指令实现,可能涉及直接调用操作系统的内存管理器。
在Java 6中,arraycopy的性能为improved,因为“当没有发生重叠时,现在将手动编码的程序集存根用于每种类型的大小”。
阅读其他post了解更多详情。
答案 3 :(得分:1)
Arrays.copy,[]。clone和System.arraycopy w / new对象在正确JIT时使用相同的代码路径。
答案 4 :(得分:0)
public static double[] clone_doubles(double[] from)
{
return Arrays.copyOf(from, from.length);
}
这是使用System.arrayCopy()
:
public static double[] copyOf(double[] original, int newLength) {
double[] copy = new double[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}