美文网首页Java集合
对比Vector、ArrayList、LinkedList的区别

对比Vector、ArrayList、LinkedList的区别

作者: 上官若枫 | 来源:发表于2018-08-05 19:48 被阅读3次

    三者都实现了集合框架中的List,也就是所谓的有序集合,都提供按照位置进行定位、添加或者删除操作,都提供迭代器遍历内容

    Vector是java早期提供的线程安全的动态数组,如果不需要线程安全,不建议选择,毕竟同步是有额外开销的。内部使用数组来保存数据,根据需要自动扩容(创建新的数组,拷贝原有数组),每次增加一倍
    ArrayList是应用更加广泛的动态数组实现,本身不是线程安全的,所以性能要好很多,可以根据需要扩容,每次增加50%
    LinkedList顾名思义是java提供的双向链表,不需要调整容量,也不是线程安全的。

    补充

    • Vector和ArrayList比较适合随机访问(通过index下标访问,行为类似数组的访问),在中间插入数据的话,性能会比较差
    • LinkedList在进行节点插入和删除的时候,比较高效,随机访问性能慢

    所以在使用过程中,要注意两点,一个是线程安全问题,一个是插入多还是随机访问多。

    整体集合

    image.png

    • List,有序集合,提供方便的访问、插入、删除
    • Set,不允许重复元素,
    • Queue/Deque,标准队列结构,支持先入先出和后入先出等特定行为

    Set

    • TreeSet支持自然访问,但是添加、删除包含等操作比较低效
    • HashSet是利用哈希算法,无序
    • LinkedHashSet内部构建了一个记录插入顺序的双向链表,因此提供了按照插入顺序遍历的能力,
    • 在遍历元素的时候,hashset性能受自身容量影响,所以初始化的时候,除非有必要,不然不要将其背后的HashMap容量设置过大。而对于LinkedHashSet由于内部链表提供方便,遍历性能和元素多少有关

    相关文章

      网友评论

        本文标题:对比Vector、ArrayList、LinkedList的区别

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