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; 
}

 

转载于:https://www.cnblogs.com/Eeexiang/p/10133031.html