赞
踩
大致步骤:
1.先将minCapacity=size+1,判断是否是第一次插入值,若elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA(即初始化ArrayList时未指定初始化大小,或者指定的大小为0)则将minCapacity替换为DEFAULT_CAPACITY,即10
2.判断是否需要扩容:判断minCapacity(只有给未初始化设定大小或设定为0的ArrayList第一次添加值时会是10,其余都是size+1)与elementData.length比较,若大于elementData.length,则进行扩容
3.扩容大小第一阶段判断:将elementData.length * 1.5与minCapacity比较取得最大值newCapacity
4.扩容大小第二阶段判断:若newCapacity大于MAX_ARRAY_SIZE,则判断minCapacity是否大于MAX_ARRAY_SIZE,
大于则newCapacity=Integer.MAX_VALUE,不然就newCapacity=MAX_ARRAY_SIZE
5.令elementData = Arrays.copyOf(elementData, newCapacity);
注:(MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8,Integer.MAX_VALUE=2<<31 -1)
6.设置elementData[size]的值为新插入的值,并将size++
结论:需要特别注意的是初始化ArrayList时未指定初始化大小或指定大小为0时,数组的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。