在开发的过程中很多情况都要对数组进行复制,下面举例介绍一下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,欢迎一起交流一起进步。