为什么newArrayList时最好指定长度?新数组列表<>(20);addelementadd(Ee)源码publicbooleanadd(Ee){//检查扩展参数是否为当前数组length+1ensureCapacityInternal(size+1);//递增modCount!!元素数据[大小++]=e;returntrue;}再探索扩容函数//扩容方法privatevoidensureCapacityInternal(intminCapacity){ensureExplicitCapacity(calculateCapacity(elementData,minCapacity));}//计算出一个值A,如何使用这个值来和原数组进行比较length,privatestaticintcalculateCapacity(Object[]elementData,intminCapacity){if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){返回Math.max(DEFAULT_CAPACITY,minCapacity);}returnminCapacity;}//用A求和比较源数据的长度,如果>原始数据的长度,扩大容量privatevoidensureExplicitCapacity(intminCapacity){modCount++;//溢出意识代码if(minCapacity-elementData.length>0)grow(minCapacity);}调用ensureCapacityInternal(size+1)时,看Debug,再看grow(minCopacity)函数,所以在初始化的时候数组,尽量分配长度,减少内存申请和释放操作!
