在Java中复制double []的最快方法是什么?

时间:2011-10-12 16:54:06

标签: java

简单的问题,在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[][]

5 个答案:

答案 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时使用相同的代码路径。

以下是相应的错误:http://bugs.sun.com/view_bug.do?bug_id=6428387

答案 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;
}