ArrayList arrayList = new ArrayList();
底层创建了长度为10的Object[]数组elementData
arrayList.add(123);
elementData[0]=new Integar(123);
...
arrayList.add(11);;
如果此次添加导致底层elementData数组容量不够,则默认扩容为原来1.5倍,同时将原有数组中的数据复制到新的数组中
如果扩容后数组容量还是不够,则新数组容量直接变为所需要的容量
如果扩容后数组容量比自定义的最大数组容量还要大,则设置新数组容量为整型的最大值
结论:建议在开发中使用带参数的构造器,避免使用时候扩容,提高效率
ArrayList arrayList = new ArrayList();
底层创建了长度为10的Object[]数组elementData为{},并没有真正的创建数组
arrayList.add(123);
第一次调用add()时,底层才创建了长度为10的数组,并将数据123添加到elementData中
其他操作的源码相同
小结:jdk7中ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省了内存。