new一个无参的list,内部就会创建一个空的数组
public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }传入有参的list,会创建一个参数大小的数组
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); } }传入一个collection集合,会用集合大小作为起始容量
public ArrayList(Collection<? extends E> c) { Object[] a = c.toArray(); if ((size = a.length) != 0) { if (c.getClass() == ArrayList.class) { elementData = a; } else { elementData = Arrays.copyOf(a, size, Object[].class); } } else { // replace with empty array. elementData = EMPTY_ELEMENTDATA; } }add方法:
在添加一个元素的时候,会立马创建一个大小为10的数组
在数组满的时候,会进行扩容扩容的大小为原数组大小的1.5倍
这里的1.5倍并不是乘数计算,而是位运算例如:10>>>1 =5,原来的10+5 =15(新数组的大小)
addAll方法:
没有元素的时候,扩容大小Math.max(10,集合大小)
有元素的时候,扩容大小为Math.max(原容量的1.5倍,集合大小)