JDK7和JDK8中的底层源码有所不同

1、JDK7中

1.1 空参构造器

ArrayList list = new ArrayList( );
空参构造器默认创建的底层数组长度是10

1.2 add

如果此次的添加,导致了底层的elementData数组的容量不够,那么就进行扩容
默认情况下,会扩容为原来容量的1.5倍,同时会将原来数组中的数据复制到新的数组中
结论:开发中使用带参数的构造器。

1.3 带参构造器

使用带参构造器来指定创建的底层数组的长度

2、JDK8中

调用空参构造器的时候不会再直接创建好指定大小的底层数组。
第一次调用add方法的时候,才会进行创建操作。
后续的添加和扩容操作不变。

3、结论

JDK8中ArrayList中对象的创建,延迟了底层数组的创建,可以节省内存。