克隆 Java 陣列
Farkhanda Athar
2023年1月30日
2021年11月18日
-
使用 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
Arraya after copying elements are:ILoveMyCountry
這裡,
src_array
:從中複製專案的源陣列。src_Pos
:源陣列中的位置是複製開始的點。dest_array
:目標所在的陣列,元素將被複制到該陣列中。dest_Pos
:要複製的專案目標陣列中的起始位置。length
:要複製的陣列的長度。