JDK78情况下,ArrayList的源码分析

it2023-03-07  76

jdk7中:

ArrayList list = new ArrayList;//底层创建了长度是10的Object[]数组elementData list.add(123);//elementData[0] = new Integer[123]; ... list.add(11);//如果此次的添加导致底层elementData数组容量不够,则扩容。 //默认情况下,扩容为原来的1.5倍,同时需要将原有数组中的数组复制到新的数组中。

结论: 建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity) jdk8中的变化:

ArrayList list = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度为10的数组 list.add(123);//第一次调用add()时,底层才创建了长度为10的数组,并将123添加到element[0]中 ... //后续的添加与扩容操作与jdk7无异

小结:

jdk7中的ArrayList的对象的创建类似于单例的饿汉式jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了对象的创建,节省内存空间
最新回复(0)