ArrayList源码分析

    科技2024-07-03  69

    ArrayList 是我们经常用到的,在jdk1.7中 和 1.8 些许不同

    jdk1.7情况下

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

    结论 : 建议开发当中使用有参构造 ,传递一个初始容量大小避免频繁的扩容

    jdk1.8情况下

    ArrayList list = new ArrayList(); 底层Object [ ] elementData 没有设置初始容量。 当 list . add( 1 ); 的时候才会创建长度为10 的数组,并且将 1 添加到elementData [0] = new Integer(123); … 后续添加和扩容的操作 和 jdk1.7没有区别

    总结 :

    jdk 1.7 中的ArrayList 的对象创建 类似于单例模式的饿汉式 ,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建在某种意义上节省了内存空间

    Processed: 0.009, SQL: 8