ArrayList list = new ArrayList(20);
for( int i = 0 ; i < 30 ; i ++){
list.add(new Integer(i));
}
System.out.print(list.size());
为什么我设定List的初始容量为20,咋还能装入30个对象呢!!!

解决方案 »

  1.   

    add()的时候会自动检查,如果容量不够了自动创建更大的数组并把原来的内容复制进取,然后再添加元素。
      

  2.   

    ArrayList中下面的方法负责: /**
         * Increases the capacity of this <tt>ArrayList</tt> instance, if
         * necessary, to ensure  that it can hold at least the number of elements
         * specified by the minimum capacity argument. 
         *
         * @param   minCapacity   the desired minimum capacity.
         */
        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 = (E[])new Object[newCapacity];
        System.arraycopy(oldData, 0, elementData, 0, size);
    }
        }
      

  3.   

    建议认真看一下api doc。
    ArrayList会自动增加容量的。
      

  4.   

    每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
      

  5.   

    新创建一个ArrayList是,默认长度是10个元素,ArrayList里面的元素满了时,ArrayList的长度会自动增长三分之二的长度。
      

  6.   

    这是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);
          }