ArrayList 调用add的时候,会进入
ensureCapacityInternal方法
calculateCapacity方法会首先会判断是否是当前数组对象是不是空的,如果是的话会返回 默认大小10和当前最小需要大小的最大值,如果不是空的话直接返回当前数组最小需要的值。
上面的返回值会传入ensureExplicitCapacity方法,modCount是记录当前修改的个数,下面判断如果当前需要的最小值比数组实际的长度大的时候(也即不能满足装载需求的时候),此时就调用扩容方法,grow。
对于grow方法,首先会获取 oldCapacity的值,newCapacity的值位运算为old的1.5倍,如果第一次的时候old为0,此时将new赋值为minCapacity,也即为10,如果old大于 Integer.MAX_VALUE - 8,此时直接扩容为最大值,否则调用Arrays.copyOf的扩容方法进行扩容。