克隆 Java 数组
    
    
            Farkhanda Athar
    2023年10月12日
    
    Java
    Java Array
    
- 
          
            使用 Java 中的 for循环手动复制 Java 数组
- 
          
            使用 Arrays.copyOf()克隆 Java 数组
- 
          
            使用 Arrays.copyOfRange()克隆 Java 数组
- 
          
            使用 Object.clone()克隆 Java 数组
- 
          
            使用 System.arraycopy()克隆 Java 数组
 
可以通过以下方式将 Java 数组复制到另一个数组中。
- 使用变量赋值:这种技术有其缺点,因为对数组元素的任何更改都会反映在两个地方。
- 创建一个大小相同的数组并复制每个元素。
- 对阵列使用克隆技术。克隆方法创建一个大小相似的全新数组。
- 利用 System.arraycopy()技术。arraycopy是一种从数组中复制特定部分的方法。
使用 Java 中的 for 循环手动复制 Java 数组
通常,当我们想要复制 a 和 b 等变量时,我们按以下方式执行复制操作:
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:要复制的数组的长度。
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe