7.类Arrays
java语言中经常需要复制数组或者数组的一部分。对于这种情况,我们可以自己写一个方法来实现复制,也可以调用java中的标准类库中的Arrays.copyOf和Arrays.copyOfRange方法。
方法Arrays.copyOf被重载可以用于任意类型的数组,它从数组的第一个元素开始将值赋给新的数组,直到指定的个数为止。即:
int [] arr={2,5,4};
int[] arr1=Arrays.copyOf(arr,arr.length);
上面复制的结果是将arr中的元素全部复制到arr1,第一个参数是表示复制的目标,第二个元素是表示要复制的个数。这个参数可以与目标数组中的元素个数不同,可以大于目标数组中的元素个数,新数组中的多出的元素将被赋为默认值。若是小于目标数组中的元素个数,就复制前面的个数。
如果要复制的是数组的一部分,推荐使用copyOfRang方法,这个方法也被重载,可以创建一个任何类型的新数组。它从数组的第一个元素开始将值赋给新的数组,直到指定位置为止(包含头不包含尾)。例如;
int[] arr={2,5,4,8};
int[] arr2=Arrays.copyOfRang(arr,1,3);
数组arr2中元素为5,4,,也就是所谓的包含头不包含尾。这个方法的第三个参数指定的是数组的下标,但是不复制这个元素。
需要注意的是,这两个数组复制方法都是浅复制,也就是说当复制多维数组时只会复制数组的引用,不会复制对象的本身。因此复制后得到的数组跟原来的数组是同一对象,当对象发生改变时,两个数组也会随之而变。
从javaSE6后,java类库中有提供新的数组复制方法:Arrays.copyarray这个不符合java命名规范。该方法的格式如下 :
public static void copyarray(Object scr,int srcPos,Object dest,int destPos,int length)
其中参数scr,dest,分别表示的是源数组和目标数组,scrPos和destPos表示源数组和目标数组的起始位置,length表示的是复制元素的个数。
copyarray方法不会为数组非配内存空间,所以在复制数组前一定要创建数组。
int[] arr={2,5,4,8};
int[] arr3=new int[arr.length+2];
int[] arr2=Arrays.copyOfRang(arr,0,arr2,1,5);
而多维数组是一个对象,所以可以调用从Object类中的继承的方法clone。在java中copyarry和clone都是浅复制。