java 深度複製與淺複製 copyOf、arraycopy、copyOfRange
阿新 • • 發佈:2018-12-17
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;
}