Arrays.copyOf的深入了解

1、Arrays.copyof是什么?
Arrays.copyof是用于数组进行复制时常使用的方法,本身在Arrays类里面,而之所以能这么使用而不用创建对象在于该方法本身由static修饰,被static修饰的方法可以在该类创建对象前载入jvm
2、方法解析
下图包含了copyof众多的重载方法

以最典型的Arrays.copyOf(srcArray, length);为例进行分析
其实质是调用了System.arraycopy方法

public static long[] copyOf(long[] original, int newLength) {
       long[] copy = new long[newLength];
       System.arraycopy(original, 0, copy, 0,
                        Math.min(original.length, newLength));
       return copy;
   }

由此可以看到实现有三布:
1、先产生一个新的数组
2、调用arraycopy方法
3、返回产生的新数组
3、思考
当我们将原来的数组进行扩容的时候,调用该方法产生了一个新的数组,而将扩容后的数组赋值给原来的数组的时候,原数组指向新产生的数组,但其原数组的内容依然在内存中,等待jvm回收,在这段时间中其实是造成了内存的浪费
所以使用该方法尽管简便,实际上有一定的不足。
4、System.arraycopy的实现

   private static void arraycopy(long[] original, int i, long[] copy,int j, int min) {
        for (; i< min; i++) {
            if (i<original.length) {
                copy[j++] = original[i];
            }else {
                copy[j++]=0;
            }
        }
    }
}

posted @ 2021-06-02 10:17  aheiccc  阅读(3373)  评论(0编辑  收藏  举报