在开发的过程中很多情况都要对数组进行复制,下面举例介绍一下java中四种数组的复制。

第一种:通过for循环进行数组的复制,例如:

		Object[] num={1,2,3,4,5};
		Object[] num1=new Object[num.length];
		for(int i=0;i<num.length;i++){
			num1[i]=num[i];
		}
		for(Object i:num){
			System.out.print("num:"+i+"\t");
		}
		System.out.println();
		for(Object i:num1){
			System.out.print("num1:"+i+"\t");
		}
运行结果:

num:1	num:2	num:3	num:4	num:5	
num1:1	num1:2	num1:3	num1:4	num1:5	
这种方式最大的问题就是麻烦,如果要复制多个数组就可能要进行多个循环复制。相当麻烦,不推荐大家使用这种方式进行数组复制操作。

第二种:通过java中clone方法进行数组复制。例如:

		Object[] num2=num.clone();
		for(Object i:num){
			System.out.print("num:"+i+"\t");
		}
		System.out.println();
		for(Object i:num2){
			System.out.print("num2:"+i+"\t");
		}
运行结果:
num:1	num:2	num:3	num:4	num:5	
num2:1	num2:2	num2:3	num2:4	num2:5	
这种方式比对第一种方式就是方便,只需要一个函数就可以实现。但是对数组的灵活度就大大降低,这样的复制操作只能是全部复制不能部分复制。在需要完整的复制整个数组的时候可以考虑使用这种方式。

第三种:利用java中的Arrays.copyOf(original, newLength)函数进行复制操作。下面看例子:

		Object[] num={1,2,3,4,5};
		Object[] num3=Arrays.copyOf(num, 4);
		Object[] num4=Arrays.copyOf(num, 8);
		for(Object i:num3){
			System.out.print("num3:"+i+"\t");
		}
		System.out.println();
		for(Object i:num4){
			System.out.print("num4:"+i+"\t");
		}
运行结果:

num3:1	num3:2	num3:3	num3:4	
num4:1	num4:2	num4:3	num4:4	num4:5	num4:null	num4:null	num4:null
这里的newLength指的是数组的需要复制的长度,如果小于原数组则只复制指定长度,如果大于原数组长度则空出部分为空。

这种方式对比前两种一个是简单,另一个是灵活度比较好。可以选择复制数组中一部分长度,如果长度过长则空出部分为空。

第四种:利用java中的System.arraycopy(src, srcPos, dest, destPos, length)进行数组复制操作。下面看例子:

/*
		 * 参数:
		src - 源数组。
		srcPos - 源数组中的起始位置。
		dest - 目标数组。
		destPos - 目标数据中的起始位置。
		length - 要复制的数组元素的数量。
		抛出:
		IndexOutOfBoundsException - 如果复制会导致对数组范围以外的数据的访问。
		ArrayStoreException - 如果因为类型不匹配而使得无法将 src 数组中的元素存储到 dest 数组中。
		NullPointerException - 如果 src 或 dest 为 null。
		 */
		Object[] num={1,2,3,4,5,null,null,null};
		Object[] num3={6,7,8};
		System.arraycopy(num3,0, num, 5, 3);
		for(Object i:num){
			System.out.print("num:"+i+"\t");
		}
运行结果:
num:1	num:2	num:3	num:4	num:5	num:6	num:7	num:8	
这种方式最大的好处就是特别灵活,可以选择的复制数组中的任意数据到指定数组中去。唯一的缺点可能就是操作难度较高,容易出错,不容易掌握。

这四种数组复制方式大家可以根据项目需要来具体选择使用。

如果有什么不清楚或者有啥疑问意见可以加我QQ/微信  208017534  / qiang220316,欢迎一起交流一起进步。




本文转载:CSDN博客