克隆 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
:要复制的数组的长度。