美文网首页
List接口源码分析

List接口源码分析

作者: 浪_fa63 | 来源:发表于2020-05-16 15:00 被阅读0次

    Arraylist源码分析

    Arraylist集合底层使用动态数组实现,随机查询效率非常快,插入和删除需要移动整个数组、效率低,ArrayList不是线程安全的、 Vector是线程安全的集合。

    Vector 源码分析:

    1.默认构造函数中对数组的扩容为长度是为10;(如果创建了集合,没有使用的话是比较占用内存的);
    2.Vector集合实现add方法的时候有synchronized关键字修饰;
    3.Vector集合默认数组扩容是增长一倍,可以自己指定扩容倍数 (使用构造函数传递)
    特点:线程安全,并发的时候读非常慢

    Arraylist与Vector集合区别

    相同点:

    都是实现与List接口、底层采用数组实现

    不同点:

    Arraylist线程不安全、Vector线程是安全集合
    Arraylist底层扩容是原数组的50%,Vector集合是原数组的100%
    Arraylist底层数组没有默认长度为0,Vector底层数组默认长度为10
    Vector集合中可以使用capacityIncrement增长容量

    CopyOnWriteArrayList

    实现了List接口
    内部持有一个ReentrantLock lock = new ReentrantLock();
    底层是用volatile transient声明的数组 array
    读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
    特点:线程安全,写很慢,适合读多写少的场景

    Fail-Fast机制原理

    Fail-Fast是我们Java集合框架为了解决集合中结构发生改变的时候,快速失败的机制。


    image.png

    本文参考蚂蚁课堂:http://www.mayikt.com/#

    相关文章

      网友评论

          本文标题:List接口源码分析

          本文链接:https://www.haomeiwen.com/subject/bhtrohtx.html