size:数据的长度
先对数组长度+1,确保长度
判断当前数组是否为DEFAULTCAPACITY_EMPTY_ELEMENTDATA,之前就强调了无参构造时才会返回这个数组。所以,若创建ArrayList时调用的是无参构造,此方法会返回DEFAULT_CAPACITY(值为10)和minCapacity的最大值,因此,最终会返回固定值10;若创建ArrayList时调用了有参构造,则此方法会返回1
判断是否需要扩容,首次进来时。数组长度为0,最小扩容量为1.成立后进入扩容。然后存入elementDdata中并且初始化长度为10.返回元素集合。第二次进入此方法时。因为elementData长度为10,minCapacit长度为2。条件不成立所以不会进行扩容。直到11次添加时。进行扩容。扩容方法:获取上次元素数据的长度,然后新长度为原来元素数据的长度的1.5倍。int newCapacity = oldCapacity + (oldCapacity >> 1); 新长度=上次元素长度+(上次元素长度/2)。然后放入新的数组中入,并返回。
总结:
1:首先会记录真实数据的长度值。
2:然后首次进入会拿到最小长度。
3:判断最小长度是否大于元素数据长度。如果大于则进行扩容。
4:扩容:之前元素数据长度的1.5倍然后在判断新数组长度是否>数组的最大长度。如果大于则判断最小长度是否大于数组最大长度。如果大于就最小长度否则就是最大长度。然后copy进新的数组中。返回当前新数组。



