欢迎访问宙启技术站
智能推送

arraycopy如何复制数组?

发布时间:2023-06-16 06:35:38

arraycopy是Java提供的一个复制数组的方法,它是System类中的一个静态方法,可以实现将源数组的内容复制到目标数组中。在实际的开发过程中,arraycopy被广泛应用,能够快速、高效地处理数组的相关操作。

arraycopy方法的定义如下:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

其中,src表示源数组,srcPos表示源数组扫描的起始位置,dest表示目标数组,destPos表示目标数组存放的起始位置,length表示需要复制的元素个数。

arraycopy方法支持复制不同类型的数组,因为它是以Object类型作为源数组和目标数组的参数类型的。下面将解释如何使用arraycopy方法实现数组的复制。

1. 复制基本类型数组

当需要复制一个基本类型的数组时,可以使用arraycopy方法,如下例所示:

int[] source = { 1, 2, 3, 4, 5 };  // 源数组
int[] target = new int[5];         // 目标数组
System.arraycopy(source, 0, target, 0, source.length);

上面的代码首先创建了一个源数组source和一个目标数组target,然后调用arraycopy方法将源数组复制到目标数组中,其中srcPos和destPos都设置为0,表示从数组的起始位置开始复制。最后,打印目标数组中的元素,可以看到目标数组已经复制了源数组的内容:

for(int i = 0; i < target.length; i++) {
    System.out.print(target[i] + " ");
}

输出结果为:

1 2 3 4 5

2. 复制一维引用类型数组

当需要复制一维引用类型数组时,同样可以使用arraycopy方法,如下例所示:

String[] source = { "Hello", "World" };  // 源数组
String[] target = new String[2];         // 目标数组
System.arraycopy(source, 0, target, 0, source.length);

上面的代码创建了一个源数组source和一个目标数组target,然后调用arraycopy方法将源数组复制到目标数组中。最后,打印目标数组中的元素,可以看到目标数组已经复制了源数组的内容:

for(int i = 0; i < target.length; i++) {
    System.out.print(target[i] + " ");
}

输出结果为:

Hello World

需要注意的是,目标数组中的元素实际上是源数组元素的引用,而不是源数组元素的复制。如果修改目标数组中的元素,源数组中对应的元素也会发生改变。

3. 复制多维数组

当需要复制一个多维数组时,可以调用递归地调用arraycopy方法,将一维数组逐个复制到目标数组中去。如下例所示:

int[][] source = { { 1, 2 }, { 3, 4 } };  // 源数组
int[][] target = new int[2][2];           // 目标数组
for(int i = 0; i < source.length; i++) {
    System.arraycopy(source[i], 0, target[i], 0, source[i].length);
}

上面的代码首先创建了一个源数组source和一个目标数组target,然后使用循环将二维数组的每一个一维数组复制到目标数组中。最后,打印目标数组中的元素,可以看到目标数组已经复制了源数组的内容:

for(int i = 0; i < target.length; i++) {
    for(int j = 0; j < target[i].length; j++) {
        System.out.print(target[i][j] + " ");
    }
    System.out.println();
}

输出结果为:

1 2
3 4

需要注意的是,在复制多维数组时需要保证源数组和目标数组的维度和元素个数完全一致,否则无法进行复制。