各种Array复制方法之间的区别

时间:2009-11-08 17:28:21

标签: java arrays

之间有什么区别
  • System.arraycopy()
  • clone()
  • 通过迭代元素进行手动复制
  • Arrays.copyOf()
  • 只是在做arraynew = arrayold

4 个答案:

答案 0 :(得分:23)

  • System.arraycopy()使用JNI(Java Native Interface)进行复制 一个数组(或它的一部分),所以它是 你可以确认,非常快 here;
  • clone()创建一个 new 数组,其特征与旧数组相同,即相同大小,相同类型和相同内容。有关clone正在运行的一些示例,请参阅here
  • manual copying是手动复制。关于这种方法没有太多可说的,只是很多人发现它是performant最多的。
  • arraynew = arrayold 复制数组;它只是指向 arraynewarrayold的内存地址,换句话说,你只是将引用分配给旧数组。< / LI>

答案 1 :(得分:13)

  • System.arraycopy()将数据从一个现有数组复制到另一个数组中,并且根据参数仅复制部分数据。
  • clone()分配一个与原始数据类型和大小相同的新数组,并确保它具有相同的内容。
  • 手动复制通常与System.arraycopy()完全相同,但代码更多,因此错误的来源更多
  • arraynew = arrayold仅将对数组的引用复制到新变量,不会影响数组本身

还有一个有用的选项:

Arrays.copyOf()可用于创建具有不同大小的另一个数组的副本。这意味着新阵列可以比原始阵列更大或更大,并且通用大小的内容将是源的内容。甚至还有一个版本可以创建不同类型的数组,以及一个可以指定要复制的元素范围的版本(Array.copyOfRange())。

请注意,所有这些方法都会生成浅层副本。这意味着只复制存储在数组中的引用,并且引用的对象重复。

答案 2 :(得分:5)

Arrays.copyOf(..)在内部使用System.arrayCopy(..)方法。

答案 3 :(得分:0)

有答案但不完整。

考虑的选项是

  • Arrays.copyOf()
  • System.arraycopy()

以下是Arrays.copyOf()

的java实现
public static double[] More ...copyOf(double[] original, int newLength) {
        double[] copy = new double[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
   }

正如您所见,copyOf在内部使用System.arraycopy。

  • 如果您已创建阵列,请使用 System.arraycopy()进行复制
  • 如果您需要新数组中的结果,请使用 Arrays.copyOf()进行复制

注意:明显比较速度没有意义,因为它们的功能不同。