一、创建ArrayList
当我们在new一个ArrayList如果是空参时
底层会创建一个名字为elementData长度为0的数组。
二、添加元素
1、ArrayList无元素时
在我们执行add添加一个元素时
此时还未添加完成时数组长度为0,size初始化为0,需要进行grow()方法
因为时add只能添加一个元素所以size+1也就是最小容量minCapacity,我们看到grow方法先记录数组长度作为老容量,判断是否是空数组,我们现在的情况就是空数组所以走else,else是为elementData new了一个新数组,其容量用默认容量和最小容量进行对比,选大的默认容量是10
这一步就是以防我们新建一个数组后直接addAll()加入大量数据这样就可以根据添加的量来觉得开多少的空间。
小结:当ArrayList内无元素时,添加10以内数据量会开辟10容量的数组,如果添加10以上的数据量就会开辟对应数据量的数组。
2、ArrayList有元素时
如果ArrayList有元素则进入if会执行一个newLength方法
newLength传递三个参数老容量,需要增加的容量(最少容量-老容量)默认增加容量(老容量/2)用需要增加的容量和默认增加容量进行对比取大的和老容量相加则得到新数组所要的长度。,如果长度过大则会报错。
返回后执行copyof方法创建一个对应容量的新数组并将值赋值给新数组。
小结:当ArrayList有元素时,添加多个元素如果元素数量没有超过原来的1.5倍则会创建一个原数组1.5倍大的新数组,如果超过了原来的1.5倍则按需要的容量加上老容量作为新数组的长度。