jdk源码记录——ArrayList

ArrayList

  面试常问问题1: ArrayList与HashMap的扩容 -》为什么ArrayList的扩容是1.5倍增加,而HashMap却是以2倍方式扩容

ArrayList之grow函数

 1 private void grow(int minCapcaity){
 2     //overflow-conscious code
 3     int oldCapacity=elementData.length;
 4 
 5 //很明显下面就表明ArrayList的扩容是以1.5倍的方式进行的
 6     int newCapacity=oldCapacity+oldCapacity>>1;
 7     
 8     //下面对newCapacity的大小进行限制
 9     if(newCapacity - minCapacity <0)
10         newCapacity=minCapacity; //将newCapacity设置为默认最小尺寸
11     if(newCapacity - MAX_ARRAY_SIZE>0)
12         newCapacity=MAX_ARRAY_SIZE; //将newCapacity限制为最大尺寸
13     elementData=Arrays.copy(elementData,newCapacity)//分配一个新的数组,并将旧数组的值赋值到新数组上
14 }

 

  

posted @ 2019-04-29 21:36  seuers_leo  阅读(83)  评论(0)    收藏  举报