一、使用数组的好处
1,节约变量名
2,操作方便,指对大量同类型的数据操作时
二、数组的复制
1,虚假的复制
int[] array1 = {12,23,45,22,42,32};
int[] array2 = {32,42,45,21,11,65,35,66};
System.out.println("直接复制前:");
System.out.println(array1);
System.out.println(array2);
array1 = array2;
System.out.println("直接复制后:");
System.out.println(array1);
System.out.println(array2);
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
结果:
直接复制前:
[I@1e643faf
[I@6e8dacdf
直接复制后:
[I@6e8dacdf
[I@6e8dacdf
[32, 42, 45, 21, 11, 65, 35, 66]
[32, 42, 45, 21, 11, 65, 35, 66]
由此可以轻松看出这样直接 = 只是将array2的地址给了array1,并没有实现我们真正的目的。
2,真实的复制
因为java里数组定义时就已经确定了长度,所以想要复制一个长度不等的数组,就只能新建一个数组,再将array1指向这个新数组。
这样就有几种方法了:
1,直接用new新建一个,然后用for循环复制赋值,就能形成复制。
array1 = new int[array2.length];
2,用Arrays.copeof(),java提供的复制功能,
System.out.println("Arrays复制后:");
array1 = Arrays.copyOf(array2,array2.length);
System.out.println(array1);
System.out.println(Arrays.toString(array1));
Arrays复制后:
[I@7a79be86
[33, 42, 45, 21, 11, 65, 35, 66]
可以看到,array1的地址变成了一个新的地址
3,使用方案2的底层实现,效率高
System.arraycopy(src,srcPos,dest,destPos,length);
src – 源数组。
srcPos – 源数组中的起始位置。
dest – 目标数组。
destPos – 目的地数据中的起始位置。
length – 要复制的数组元素的数量。
要注意,这样并没有解决数组长度的问题,需要和
array1 = new int[array2.length];配合使用。
但这样比起用for循环赋值要快的多。