各种数组复制方法之间的区别

2022-09-02 09:06:44

两者之间有什么区别

  • System.arraycopy(),
  • clone()
  • 通过循环访问元素进行手动复制
  • Arrays.copyOf()
  • 只是做?arraynew = arrayold

答案 1
  • System.arraycopy()使用JNI(Java Native Interface)来复制数组(或其部分),因此它非常快,您可以在此处确认;
  • clone()创建一个与旧数组具有相同特征的新数组,即相同的大小、相同的类型和相同的内容。请参阅此处了解一些实际操作示例;clone
  • manual copying嗯,是手动复制。关于这种方法没有太多可说的,除了许多人发现它是性能最高的。
  • arraynew = arrayold 复制数组;它只是指向内存地址,或者换句话说,您只是将引用分配给旧数组。arraynewarrayold

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

还有一个有用的选项:

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

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