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基础
原文来自:https://www.py.cn© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容