1.ArrayList的扩容是懒惰的,在没有添加元素之前,即使指定了容量,也不会真正创建数组;
2.使用add方法时:当存入数据时进行扩容,第一次扩容到长度为10的数组,替换掉长度为0的数组;第二次扩容为上一次的1.5倍(实际上是[>>>1]),也就意味着第二次扩容大小为15,同时新数组依旧替换掉旧数组。
3使用addAll()方法时:
3.1当ArrayList中为空时,添加的元素的数量小于等于10时,第一次扩容为10,当添加的元素数量大于10时,扩容大小为元素数量。
例如:添加5个元素,第一次扩容为10;
添加12个元素,第一次扩容为12。
3.2当ArrayList中不为空时,规则类似于上一条,添加的元素数量与原本的元素数量如果大于当前容量且小于下次扩容的大小,则为1.5倍数组大小扩容,如果两者之和大于下次扩容大小,则扩容大小为两者元素和大小;
例如:当前ArrayList中已经有10个元素,再增加3个元素,则一共13个元素,小于扩容大小15,下一次扩容大小为15;
当前ArrayList中已经有10个元素,再增加6个元素,则一共16个元素,大于扩容大小15,下一次扩容大小为16。