扩容比较简单,ArrayList的初始长度是10。当长度达到最大长度的时候扩容为1.5倍。
缩容:
ArrayList不会自动缩容,当使用trimToSize()方法的时候可以缩容
public void trimToSize() {
modCount++;
if (size < elementData.length) {
elementData = (size == 0)
? EMPTY_ELEMENTDATA
: Arrays.copyOf(elementData, size);
}
}
其中调用的copyOf()方法的源码
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
就是说这个ArrayList实际长度有多大就缩小为多大的长度。
其中的size=elementData.length