数组复制的两种方式
通过Arrays类
Arrays.copyOf(Object [] original, int newl ength)
Arrays.copyOfRange(Object [] original, int from, int to)
推荐使用这个
通过system类
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
复制的推荐使用这个
两种复制的区别
- Arrays里 面的两种复制方法底层仍然是System的复制,只不过在System基础上进行了一个次封装,变得更加的方便;
- Arrays完成复制之后,会把新数组返回来,而System则 需要你提前定义好一个数组 ;
demo
copy
int [] source = {1,2,3,4,5,6};
//1、copyOf
int [] newArray = Arrays.copyOf(source, source.length);
System.out.println(Arrays.toString(newArray));
//1.1、我们在进行复制的时候,可以完成数组的扩容
int [] newArray3 = Arrays.copyOf(source, source.length*2);
System.out.println(Arrays.toString(newArray3));
copyOfRange
//2、copyOfRange
int [] newArray1 = Arrays.copyOfRange(source, 3,source.length);//包前不包后
System.out.println(Arrays.toString(newArray1));
System.arraycopy
//3、System.arraycopy
int [] newArray2 = new int[source.length];
System.arraycopy(source, 0, newArray2, 0, source.length);
System.out.println(Arrays.toString(newArray2));
//3.1、把原始数组中的3,4这两个元素复制到新的数组中的5,6这两个位置中去
int [] newArray4 = new int[source.length];
System.arraycopy(source, 2, newArray4, 4, 2);
System.out.println(Arrays.toString(newArray4));
数组复制的内存结构
数组里面的元素是基本数据类型
数组里面的元素是引用数据类型
这种类型是浅层复制
浅层复制
浅层复制:只复制最外层容器,而不复制容器里面的元素,JavaAPI中所有
的复制都是浅层复制,浅层复制的效率快,能适用大部分的场景;
深层复制:
不仅复制外层容器,还复制了容器里面的所有元素,我们常用的
深层复制方式是使用I0流中的序列化和反序列化,效率低,只适用于一些特
殊场合;