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