在看ArrayList源码时看见,当扩容时采取的是Arrays.copyOf(),插入或删除时使用的是System.arrayCopy()
认为这两者之间的主要区别是Arrays.copyOf()在复制数组的元素是会创建一个新的数组,返回类型是数组,System.arrayCopy()值复制到已经存在的数组中去,返回类型是void
看copyOf源码发现,其实前者调用了后者
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}