我们走add方法看看,ensureCapacityInternal 翻译过来是:确保内部容量。把size看作集合的长度,size初始是0,只有每次走add方法最后时,size才会+1,因为是第一次添加,所以size为0,minCapacity意思是最小容量,size+1=1,意思是我们第一次添加1个的时候,最小容量也确实是需要1个容量,size+1没毛病。
进入这个方法看看
判断elementData是不是空数组,如果是空数组时,取DEFAULT_CAPACITY、minCapacity俩个值的最大值,所以取10,把10赋值给minCapacity
我们进入ensureExplicitCapacity方法,翻译过来是:确认明确容量
modCount,记录修改次数,防止多线程同时操作,抛出异常。只做稍微了解
所需要的最小容量大于当前数组的长度,进行扩容,走grow方法
当前的数组长度赋值给oldCapacity(老容量),
int newCapacity = oldCapacity + (oldCoapacity >> 1); oldCoapacity向右偏移一位,意思是除以2,这里就可以看出扩容是1.5倍扩容。
由于是一次add,newCapacity计算后记过还是0,if判断后newCapacity=10,然后
Arrays.copyOf(elementData, newCapacity);复制老数组给新数组
最后把元素添加到数组里
当集合已经添加完8个元素之后,进行扩容,是8的1.5倍扩容
因篇幅问题不能全部显示,请点此查看更多更全内容