ArrayList 和 LinkedList 的区别

一、ArrayList 和 LinkedList 的区别

  1. ArrayList 的底层是顺序表(数组),LinkedList 底层是链表

  2. ArrayList 数据存放在连续的内存空间上的,LinkedList 数据 不是存放在连续的内存空间上的

  3. ArrayList 访问数据是随机且高效的,按照下表访问数据的时间复杂度是 O(1)

  4. LinkedList 随机插入删除数据是高效的,时间复杂度是 O(1);但是,其中 add 方法的插入数据操作的时间复杂度是 O(N);

    对于 add(Index,elem):
    ArrayList 取下标的过程是 O(1),插入删除数据是 O(N);
    LinkedList 取下标的过程是 O(N),插入删除数据是 O(1);

  5. ArrayList 在初始化的时候,需要 capacity 参数来指定最大容量,当 add 尾插时,元素个数小于 capacity 时,效率都高,时间复杂度为 O(1);当参数个数达到 capacity 时,就得进行扩容操作(就是申请一个大的内存空间,将原数据搬运过来,在释放原来的内存);
    LinkedList 没有 capacity 参数这个说法,而是需要一个内存就申请一个内存,方便操作

  6. ArrayList 比较害怕内存碎片,而 LinkedList 不需要担心这个问题

二、ArrayList 和 Vector 的区别

  1. Vector 是老版本的顺序表,ArrayList 是新版本的顺序表
  2. Vector 是线程安全的,ArrayList 是线程不安全的
  3. 现在不太推荐使用 Vector ,更建议使用 JUC (Java.util.C……)里的组件
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值