- 在
JDK1.7
中,使用ArrayList list = new ArrayList()
创建List集合
时,底层直接创建了长度是10的Object[]
数组elementData
;
在接下来调用add()
方法向集合中添加元素时,如果本次的添加导致底层elementData
数组容量不足,则进行扩容。
默认情况下,扩容为原来的1.5
倍(>>1
),同时将原来数组中的所有数据复制到新的数组中。- 故而,由此得到结论,在开发中,建议使用带参构造器创建List集合:
ArrayList list = new ArrayList(int capacity)
,
预估集合的大小,直接一次到位,避免中间的扩容,提高效率。
- 在
JDK1.8
中,使用ArrayList list = new ArrayList()
创建List集合
时,底层的Object[] elementData
初始化为{}
,并没有直接创建长度为10的数组
;
而在第一次调用add()方法时,底层才创建了长度为10的数组,并将本次要添加的元素添加进去
。
...
后续的添加和扩容操作与JDK1.7无异。
总结:JDK1.7中的ArrayList对象的创建,类似于单例中的饿汉式;而JDK1.8,则类似于单例中的懒汉式。
你品,你细品。
这么做的好处就是:延迟了数组的创建,节省内存空间。