克隆 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