Eee_xiang

导航

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

 

posted on 2018-12-17 18:18  Eee_xiang  阅读(776)  评论(0编辑  收藏  举报