克隆 Java 数组

Farkhanda Athar 2023年10月12日
  1. 使用 Java 中的 for 循环手动复制 Java 数组
  2. 使用 Arrays.copyOf() 克隆 Java 数组
  3. 使用 Arrays.copyOfRange() 克隆 Java 数组
  4. 使用 Object.clone() 克隆 Java 数组
  5. 使用 System.arraycopy() 克隆 Java 数组
克隆 Java 数组

可以通过以下方式将 Java 数组复制到另一个数组中。

  • 使用变量赋值:这种技术有其缺点,因为对数组元素的任何更改都会反映在两个地方。
  • 创建一个大小相同的数组并复制每个元素。
  • 对阵列使用克隆技术。克隆方法创建一个大小相似的全新数组。
  • 利用 System.arraycopy() 技术。arraycopy 是一种从数组中复制特定部分的方法。

使用 Java 中的 for 循环手动复制 Java 数组

通常,当我们想要复制 ab 等变量时,我们按以下方式执行复制操作:

public class Main {
  public static void main(String[] args) {
    int IArray[] = {24, 45, 56};

    System.out.println("Before assignment the values of IArray[] are:");
    for (int i = 0; i < IArray.length; i++) System.out.print(IArray[i] + " ");

    int CArray[] = new int[IArray.length];

    CArray = IArray;
    CArray[1]++;

    System.out.println("\nElements of IArray[]:");
    for (int i = 0; i < IArray.length; i++) System.out.print(IArray[i] + " ");

    System.out.println("\nElements of CArray[]:");
    for (int i = 0; i < CArray.length; i++) System.out.print(CArray[i] + " ");
  }
}

输出:

Before assignment the values of IArray[] are:
24 45 56 
Elements of IArray[]:
24 46 56 
Elements of CArray[]:
24 46 56 

当你将相同的过程应用于数组时,它不会有效。

使用 Arrays.copyOf() 克隆 Java 数组

Arrays.copyOf() 这个方法有助于 System.arraycopy() 过程的内部使用。虽然它不如数组复制有效,但它可以复制完整或部分数组,类似于数组复制方法。copyOf() 方法是 java.util 包中的一个元素,并且是 Arrays 类的一部分。这种方法背后的基本思想是:

public class Main {
  public static void main(String args[]) {
    int[] OArray = new int[] {11, 12, 13};

    System.out.println("Original Arrays elements are");
    for (int i = 0; i < OArray.length; i++) System.out.print(OArray[i] + " ");

    int[] CArray = Arrays.copyOf(OArray, 5);

    CArray[3] = 22;
    CArray[4] = 66;

    System.out.println("\nNew array after copying and modification are:");
    for (int i = 0; i < copy.length; i++) System.out.print(copy[i] + " ");
  }
}

输出:

Original Arrays elements are
11 12 13 
New array after copying and modification are
11 12 13 22 66 

这里,

  • original:将被复制到新创建的数组中的数组。
  • newLength:将返回的复制数组长度。

因此,此方法通过添加 0 来创建新数组来填充或截断长度,从而创建作为指定大小的第一个参数提供的数组的精确副本。这意味着如果复制的数组的大小大于数组 0 中的原始大小,则 s 将替换其余元素。

使用 Arrays.copyOfRange() 克隆 Java 数组

方法 Arrays.copyOfRange() 专门用于复制数组的一部分。类似于 toCopyOf() 方法,该方法使用 System.arraycopy() 技术。Arrays.copyOfRange() 过程背后的基本思想可以描述如下:

import java.util.Arrays;

class Main {
  public static void main(String args[]) {
    int IArray[] = {100, 200, 300, 400, 500};

    int[] CArray = Arrays.copyOfRange(IArray, 2, 6);
    System.out.println("Array within the index range : " + Arrays.toString(CArray));

    int[] CArray1 = Arrays.copyOfRange(IArray, 4, IArray.length + 3);

    System.out.println("Array copied within the indexed range: " + Arrays.toString(CArray1));
  }
}

输出:

Array within the index range : [300, 400, 500, 0]
Array copied within the indexed range: [500, 0, 0, 0]

这里,

  • original:正在复制的范围的数组。
  • from:要复制的数组的索引。
  • to:要复制的范围的索引,并且是独占的。

使用 Object.clone() 克隆 Java 数组

Java 数组在内部实现了一个 Cloneable 接口,因此可以毫不费力地克隆 Java 数组。可以克隆一维和二维数组。如果复制一维数组,它会创建复制值的数组元素的扩展副本。

另一方面,当你复制二维或多维数组时,会创建元素的小副本,即复制唯一的参考信息。这个克隆过程是使用提供给数组的 clone() 方法完成的。

class Main {
  public static void main(String args[]) {
    int NArray[] = {50, 100, 150, 200, 250, 300};

    int CArray[] = NArray.clone();

    System.out.println("Original Num Array are:");
    for (int i = 0; i < NArray.length; i++) {
      System.out.print(NArray[i] + " ");
    }
    System.out.println();

    System.out.println("Cloned Num Array are:");
    for (int i = 0; i < CArray.length; i++) {
      System.out.print(CArray[i] + " ");
    }
    System.out.println("\n");

    System.out.print("NArray == CArray = ");
    System.out.println(NArray == CArray);
  }
}

输出:

Original Num Array are:
50 100 150 200 250 300 
Cloned Num Array are:
50 100 150 200 250 300 

NArray == CArray = false

使用 System.arraycopy() 克隆 Java 数组

Java 的 System 类提供了一个名为 ArrayCopy 的选项,它允许你将元素从一个数组复制到另一个数组。这种方法最常见的模型是:

class Main {
  public static void main(String[] args) {
    // declaring a source array
    char[] Oarray = {'I', 'L', 'o', 'v', 'e', 'M', 'y', 'C', 'o', 'u', 'n', 't', 'r', 'y'};

    char[] Farray = new char[14];

    System.arraycopy(Oarray, 0, Farray, 0, 14);
    System.out.println("Origional Array Elements are:" + String.valueOf(Oarray));

    System.out.println("Arrays after copying elements are:" + String.valueOf(Farray));
  }
}

输出:

Origional Array Elements are:ILoveMyCountry
Arrays after copying elements are:ILoveMyCountry

这里,

  • src_array:从中复制项目的源数组。
  • src_Pos:源数组中的位置是复制开始的点。
  • dest_array:目标所在的数组,元素将被复制到该数组中。
  • dest_Pos:要复制的项目目标数组中的起始位置。
  • length:要复制的数组的长度。

相关文章 - Java Array