ArrayList底层是Object[] 数组
扩容机制:
无参构造器:默认为0
第一次添加elementData扩充为10,再次扩容,扩容为当前的1.5倍
有参构造器:参数为多少,elementData为多少,再次扩容扩容为当前的1.5倍
this.elementData = new Object[initialCapacity];
1.5倍实则是:
oldCapacity + (oldCapacity >> 1);
这里的符号”>>”表示右移操作,即将oldCapacity进行二进制位移动,每向右移动一位相当于除以2(按位取整),再把结果累加到oldCapacity上即可。
addAll方法:
当没有元素时,扩容为Math.max(10,实际元素个数,有元素时为Math.max(原容量1.5倍,实际元素个数)