Java ArrayList

import java.util.ArrayList;
import java.util.List;

/**
ArrayList源码分析:
  JDK7下:
    List list = new ArrayList();创建一个长度为10的Object[]数组,
        若此次添加导致容量不够,调用grow()扩容,默认扩容为1.5倍(扩容时还要复制到新的数组),如果事先知道总共要放的个数,调用有参构造函数效率更高。
 JDK8下:
    List list = new ArrayList();
    //private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
   //public ArrayList() {
   //        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
   //}
    无参构造时,this.elementData首先指向空,并不分配内存。add时再分配。

    List list = new ArrayList(3);
//  public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
            initialCapacity);
        }
    }
    有参构造时,直接分配内存。参数为0时,this.elementData指向private static final Object[] EMPTY_ELEMENTDATA = {};
   
    后续添加与扩容与JDK7无异
Vector创建容量为10的数组,默认扩容为原来的2倍,区别于ArrayList的1.5倍。
 */
public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(1);
    }
}
posted @ 2021-03-06 14:25  HickeyZhang  阅读(67)  评论(0)    收藏  举报