千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java

ArrayList源码分析
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
private static final Object[] EMPTY_ELEMENTDATA = {};
(1)这两个空数组就是先判断是无参构造还是带参构造
add()方法:
1.ensureCapacityInternal(size + 1); 先保证容量
在保证容量的方法中,在计算最小容量,判断无参和有参数,无参的话就将DEFAULT_CAPACITY这个空数组等于10,接下来就是确认这个容量是否能满足如果满足,因为我们本次需要的最小容量比你集合中底层实现数组的长度还长,不能保证容量,如果你要的这个数组长度小于给与的长度,最终的数组长度就为10,如果不满足,将进行grow(minCapacity)这个方法进行扩容,在这个grow方法中将数组的hash值右移1位,也就是扩容1.5倍,然后再判断是否满足,以后的而每次扩容都是扩容1.5倍 如果是带参,那么就再这个带参的基础上每次扩容1.5倍
2.elementData[size++] = e;数组赋值
3.成功:return true;
例子:一个ArrayList如果要存放20个元素,要扩容几次?
10,15,22---前提是使用的是无参构造
如果带参,参数是0,那么扩容的方式是:
1,2,3,4,6,9,13,19,28