java 深度复制与浅复制 copyOf、arraycopy、copyOfRange

时间:2021-09-27 08:45:34

1、copyOf

  原型:public static <T> T[] copyOf(T[] original, int newLength)

  original:原数组  newLength:要复制的长度

  Arrays.copyof()

2、arraycopy

  原型:void arraycopy(Object src, int srcPos, Object dest, int destPos, int  length)

  src:原数组  srcPos:原数组起始位置  dest:目标数组  destPost:目标数组的起始位置  length:复制长度

  System.arraycopy()

  注意:此方法要声明一个同类型且长度足够的数组,否则会报异常

3、copyOfRange

  原型:public static <T,U> T[] copyOfRange(U[] original, int from, int to)

  original:原数组  from:原数组的起始位置  to:终点位置(不包括)

  Arrays.copyOfRange()

 最实际的应用就是List中的remove方法就是使用了arraycopy()

public E remove(int var1) {
this.rangeCheck(var1);
++this.modCount;
Object var2 = this.elementData(var1);
int var3 = this.size - var1 - ;  //判断是否移除最后一个元素
if (var3 > ) {
System.arraycopy(this.elementData, var1 + , this.elementData, var1, var3);  //将要移除元素后面的元素往前移
} this.elementData[--this.size] = null;  //clear to let GC do its work
     return var2; 
}