java 深度复制与浅复制 copyOf、arraycopy、copyOfRange
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 - 1; //判断是否移除最后一个元素 if (var3 > 0) { System.arraycopy(this.elementData, var1 + 1, this.elementData, var1, var3); //将要移除元素后面的元素往前移 } this.elementData[--this.size] = null; //clear to let GC do its work
return var2;
}