merru

http://xue163.com/72/6/729048.html

这周公司培训以前做好的一个项目的架构,由我们Leader负责培训,在讲到项目中用到的ArrayList时,我们Leader说:“当新创建一个ArrayList是,它里面默认可以放10个元素,ArrayList里面的元素满了时,ArrayList的长度会自动增长三分之二的长度。”说完之后又说让我们找个时间验证一下

我听了之后想:“不对呀,记的以前找工作时背的面试题里面说的是自动增长二分之一的长度”。
随后,把Jdk里面的源代码找出来看了看(因为现在才知道以前背的面试题有些是错的),
ArrayList中空间增长的源代码如下:
public void ensureCapacity(int minCapacity)
{
     modCount++;
     int oldCapacity = elementData.length;
     if (minCapacity > oldCapacity)
     {
         Object oldData[] = elementData;
         int newCapacity = (oldCapacity * 3)/2 + 1;
         if (newCapacity < minCapacity)
         newCapacity = minCapacity;
         elementData = new Object[newCapacity];
         System.arraycopy(oldData, 0, elementData, 0, size);
      }
}

在ArrayList的add()方法中,都首先调用了一个ensureCapacity(int miniCapacity)方法,这个方法保证elementData数组的长度不小于miniCapacity。可见ArrayList中每次增长的长度为之前的(1/2)+1。 

分类:

技术点:

相关文章: