提问人:Simon 提问时间:10/13/2011 最后编辑:Simon 更新时间:4/22/2017 访问量:6408
在 Java 中复制 double[] 的最快方法是什么?[复制]
What is the fastest way to copy a double[] in Java? [duplicate]
问:
简单的问题,在 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[][]
答:
如果您只想从一个数组复制到另一个数组,System.arraycopy
可能是您最好的选择。
否则
public static double[] clone_doubles(double[] from) {
return (double[]) from.clone();
}
会给你一个克隆。
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;
}
评论
System.arraycopy() 是你最好的选择。通常,它是使用本机指令实现的,可能涉及对操作系统内存管理器的直接调用。
在 Java 6 中,arraycopy 的性能得到了改进,因为“当没有重叠发生时,每个类型大小现在都使用手动编码的汇编存根”。
阅读这篇其他文章了解更多详情。
Java Practices 对 int
数组的不同复制方法进行了比较:
以下是他们网站的结果:
java -cp 的 。-Xint Array复印机性能250000
使用克隆:93 毫秒
使用 System.arraycopy:110 毫秒 使用 Arrays.copyOf:187 毫秒 使用 for 循环:422 毫秒
在我看来,就像是 和 之间的纽带。System.arraycopy()
clone()
评论
Arrays.copy、[].clone 和 System.arraycopy w/ new 对象在正确的 JIT 时使用相同的代码路径。
这是相应的错误:https://bugs.java.com/bugdatabase/view_bug?bug_id=6428387
评论
System.arraycopy()
arr.clone()