ArrayList的实现方式

ArrayList在JDK7以前和JDK8之后中实现方式略有不同。

JDK 7版本中:

ArrayList list = new ArrayList();//底层创建了长度是10的Object[]数组elementDate
list.add(123);//elementData[0] = new Integere(123);
···
list.add(11);//如果此次的添加导致底层elementData数组容量不够,则扩容。

默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。

结论:建议开发中使用带参的的构造器

ArrayList list = new ArrayList(int capacity);

JDK 8版本中:

ArrayList list = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度10的数组
list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementDate中
···

后续的添加和扩容和JDK 7中无异。

结论:jdk7中的ArrayList的对象的创建类似于单例中的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数据的创建,节约内存。

原文地址:https://www.cnblogs.com/smallVampire/p/13917950.html