总结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)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值