• 总结List的三种实现类


    实现方式

    ArrayList

    数组,按照索引下标访问速度快O(1),但是当删除添加元素时会导致元素的移动,速度慢O(n) LinkedList

    双向链表,按照索引下标访问速度慢O(n),但是删除添加元素速度快O(1)

    Vector

    数组,按照索引下标访问速度快O(1),但是当删除添加元素时会导致元素的移动,速度慢O(n) 

    是否同步

    ArrayList

    不同步,线程不安全,但是并发高,访问效率高                    

    LinkedList

    不同步,线程不安全,但是并发高,访问效率高 o                

    Vector

    同步,所以线程安全,但是并发低,访问效率低                     |

    如何选择

    ArrayList

    经常需要快速访问,较少在中间增加删除元素时使用;如果多线程访问,则需要自行编程解决线程安全问题

    LinkedList

    经常需要在内部增删元素,但是很少需要通过索引快速访问时使用;如果多线程访问,则需要自行编程解决线程安全问题

    Vector

    一般不使用,如果在多线程访问时可以考虑使用

    概述ArrayList、LinkedList和Vector的区别

    相同点:都实现List接口,存储数据的特点相同,存储有序的,可重复的数据

    不同点:
            ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全),底层使用Object[] elementData(具体存放数据的数组)存储,从查找的时间复杂度来说它属于O(1)。删除元素的时间复杂度O(n)。Java中的数组是定长的,如果需要变长则需要自行编程实现
         
            LinkedList:双向链表实现,增删快,查询慢 (线程不安全),具体的底层内部实现为双向链表;当然它的效率比ArrayList高,所以它的线程安全程度比ArrayList更低;从查找的时间复杂度来说属于O(n)。插入删除的时间复杂度属于O(1)。
         
            Vector:数组实现,重量级 (线程安全、使用少),具体实现为数组

            数据访问0(1),增删可能会导致一半以上
            
           如何选用
            1、当查找操作比较多时,使用ArrayList,因为其底层是数组实现,可以根据脚标查找,时间复杂度是O(1),
            而LinkedList底层是双向链表,查找起来还要遍历,其时间复杂度是O(n)。
            2、当插入,删除操作比较多时,使用LinkedList,其只需要修改pre和last指针即可,时间复杂度为O(1),
            而ArrayList还要遍历数组,时间复杂度为O(n)。

  • 相关阅读:
    为什么那么多人说大数据只是写SQL?
    【PAT 1033】 To Fill or Not to Fill 贪心算法&模拟
    基于C++实现二叉排序树数据结构
    我的创作纪念日
    JAVAWEB复习
    小学妹刚毕业没地方住想来借宿?于是我连夜用Python给她找了个好房子,我真是太机智了
    ql青龙对接傻妞和node-onebot
    JavaIO流:模型
    打工人办公环境布置篇
    【ARMv8/ARMv9 硬件加速系列 3.4 -- SVE 复制指令CPY 使用介绍】
  • 原文地址:https://blog.csdn.net/tiger_root/article/details/126706987