LinkedList和ArrayList区别

一、ArrayList

1、ArrayList集合底层采用的是数组

2、ArrayList集合默认初始化容量10,数组扩容到原容量的1.5倍

在使用ArrayList时最好提前估计一下元素的数量,给定一个初始化容量,因为数据较少时ArrayList末尾会预留一定的空间,浪费内存;而当数据较多的时候数组会扩容,扩容效率比较低

3、ArrayList​集合通过下标搜索数据,时间复杂度是O(1),所以检索效率比较高

4、ArrayList随机增删元素效率较低,因为增删以后会对操作之后所有元素的下标索引产生影响,需要进行元素的移动。但是呢,在数组末尾添加或者删除元素,时间复杂度为O(1),效率还是很高的。

当数组装满的时候还要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n)。

6、Arraylist是非线程安全的

二、LinkedList

1、LinkedList集合底层采用了双向链表

2、随机增删效率较高,LinkedList中插入或删除的时间复杂度仅为O(1)。

3、检索效率较低,因为LinkedList需要在双向列表中移动指针从前往后依次查找,直到找到index的位置,再返回 。

三、

1、LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

2、ArrayList的插入,删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList只需要移动较少的数据,而LinkedList则需要一直查找到列表尾部,反而耗费较多时间,这时ArrayList就比LinkedList要快。

3、时间复杂度

操作数组链表
随机访问O(1)O(N)
头部插入O(N)O(1)
头部删除O(N)O(1)
尾部插入O(1)O(1)
尾部删除O(1)O(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值