ArrayList在JDK1.7与1.8中的区别

  • 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,则类似于单例中的懒汉式。

你品,你细品。

这么做的好处就是:延迟了数组的创建,节省内存空间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容