Java中的ArrayList和LinkedList

终于决定了写下第一篇文章,老生常谈的List

List在Java开发工作中的重要性不言而喻,之前一直对List一知半解,甚至到现在也不敢说完全懂,写这篇文章一是给自己加深下记忆,也是写出来大家一起聊一下,跟大家学习

首先我们说下ArrayList

ArrayList底层是基于数组实现的,所以本质上ArrayList其实就是数组的封装

众所周知,数组是由相同类型的元素组成的一种数据结构,需要连续的内存来存储,可以充分发挥cpu的性能

ArrayList未初始化时是共享一个长度为0的数组,这样可以减少不必要的内存消耗,已初始化时数组长度为10

ArrayList为什么查询快呢?

刚才我们说了ArrayList是一个数组,数据是在内存中连续存储的,查询的时候减少了内存IO,easy

ArrayList为什么增删慢呢?

因为涉及到了数组的扩容和拷贝,新增数据时,要看当前插入位置数组容量够不够,不够了,那就扩容(1.5倍),扩容完毕,把老数组元素拷贝到拷贝的新数组,然后插入元素,删除跟这个也一样的

再来说下LinkedList

LinkedList是基于链表实现的,不需要声明大小,元素增加或删除时大小随之改变

并且链表不同于数组,链表不需要连续的内存进行数据存储,而是在每个节点里存储了上一个节点和下一个节点的位置

相对数组来说,链表开销更大,因为链表存储了上一个和下一个节点的位置,数组则没有

另外,链表还可作为列表或队列来使用,因为它实现了Deque接口

LinkedList为什么查询慢呢?

因为查询的时候链表需要从头到尾遍历,直到找出需要的数据,数组则直接用下标取值

LinkedList为什么增删快呢?

其实不一定,增删的时候链表同样也是要遍历的,所以效率上来讲,并不一定比ArrayList快

那么问题又来了,什么时候增删LinkedList才会更快呢?

我们知道对于ArrayList来说,增删的复杂度主要在于拷贝数组,而LinkedList没有拷贝的工作内容,数据量小时,两者增删差不多,但是如果数据量很大时,差距就很明显了,因为LinkedList不需要扩容拷贝

以上就是我对ArrayList和LinkedList的理解,请大家多多指教

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值