710

1、扩容要看添加方法,从属性中可以看出有一个DEFAULT_CAPACITY属性值10。

publicbooleanadd(Ee){
//验证是否需要扩容操作
ensureCapacityInternal(size+1);//IncrementsmodCount!!
//在对应的下标下添加值
elementData[size++]=e;
returntrue;

2、刚刚进入ensureCapacityInternal(size+1)size是一个完整的变量。

标记了ArrayList的大小(包含的元素数),而此时没有元素的是ensureCapacityInternal(0+1)。

//1、进入这个方法
privatevoidensureCapacityInternal(intminCapacity){
//2、先调用calculateCapacity(elementData,minCapacity)、这个方法就是检查第一次添加数据、并返回默认的容器大小(就是10)
//4、就是执行这个方法ensureExplicitCapacity(10)//为什么参数是10、就是因为这个方法calculateCapacity(elementData,minCapacity)做了操作。
ensureExplicitCapacity(calculateCapacity(elementData,minCapacity));

//3、数组容量计算
privatestaticintcalculateCapacity(Object[]elementData,intminCapacity){
//这个能处理就是第一次添加数据时为真
if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
//然后这个成立、这个方法是取参数1和参数2、两个数之间的最大值
//DEFAULT_CAPACITY:默认为10
//minCapacity:第一次添加数据为1
//所以10和1、10大、最后将10返回出去
returnMath.max(DEFAULT_CAPACITY,minCapacity);

returnminCapacity;


//5、确保显式容量
privatevoidensureExplicitCapacity(intminCapacity){
modCount++;

//6、做判断、
//第一次添加数据时为10-0>0:第一次可以成立
//第二次添加数据时为2-10>0:第二次可以不成立
if(minCapacity-elementData.length>0)
//7、执行下面方法、这个方法的作用才是正真的实施扩容并确定首次扩容ArrayList容器大小的方法
grow(minCapacity);//扩容

以上就是java中ArrayList集合的扩容机制,希望对大家有所帮助。更多Java学习指路:Java基础

发表回复