/** * Shared empty array instance used for empty instances. */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/** * Constructs an empty list with the specified initial capacity. * * @param initialCapacity the initial capacity of the list * @throws IllegalArgumentException if the specified initial capacity * is negative */ 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); } } /** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }
由jdk源码可知:
1,当不指定initialCapacity时创建空arraylist 此时内部空数组为DEFAULTCAPACITY_EMPTY_ELEMENTDATA,当添加第一个元素时 长度自动扩充至DEFAULT_CAPACITY也就是10
2,当指定initialCapacity=0时创建空arraylist 此时内部空数组为EMPTY_ELEMENTDATA,每添加一次元素容量扩充1
测试代码:
ArrayList<String> list1 = new ArrayList<String>(); ArrayList<String> list2 = new ArrayList<String>(0); ArrayList<String> list3 = new ArrayList<String>(20); list1.add("test"); list2.add("test"); list3.add("test");