ArrayList组成:
本身是由数组组成(Object[])+整数(size)组成
ArrayList默认容量:(无参构造)
当new对象时,不带参数
ArrayList本身定义一个空数组,则会自动赋值给elementData对象数组,而后续操作都是对elementData进行操作。
因为把EMPTY_ELEMENTDATA赋值给elementData,所以初始容量为0
当执行第一次add方法时,会和传入的参数进行比对,如果小于默认值(10),则会给数组赋初始值=10。
第一次add方法时,会进行判断操作的数组(elementData)和默认空数组(EMPTY_ELELMENTDATA)是否相等,相等则跟传入的参数(minCapacity)取最大值(10)
ArrayList本身自定义默认初始值(10)
调用方法,判断添加对象的长度,是否超越默认值(10),因为第一次肯定不会超越10
会调用Arrays工具类中的copyOf方法进行赋初始值(10)
Integer.MAX_VALUE = 0x7fffffff 等于2147483647,也就是int的最大值2^31-1
根据泛型返回对象的数组类型,并赋值给要操作的数组(elementData)
ArrayList自动扩充:
当添加超过10时,则会根据位运算来进行自动扩容。每次1.5倍进行扩容。
因为底层数组默认是10,所以在添加前10个元素时,数组容量不会变。
当添加元素为12个时,数组容量将会扩充到22
每次扩充都会通过Arrays.copyOf(elementData,newCapacity)来完成自动扩充