ArrayList和LinkedList集合有什么区别?

看到这个问题大家都觉得很简单是吗?

ArrayList查询快!LinkedList增删快!很简单的问题不是吗?

这样回答的话当然是对的,但是还不够!

有的人可能会说ArrayList底层是一个数组,所以查询快,LinkedList底层是一个链表,所以增删快.

这样回答的话当然比第一个更好,但是还是不够!

那么到底怎么回答才全面呢?直接上图!

数组


链表


那么为什么数组查询就快了呢?因为假设数组里面保存的是一组对象,每个对象都有内存大小,例如对象中有一个字段是int类型占用4个字节(只考虑实际数据占用的内存),数组在堆上的内存在数组被创建出来就被确定了是40个字节.如果我们要查找第9个对象,可以通过(9-1)*4=32,从33到36字节就是我们要找的对象.是不是很快呢?而链表却不能做到这样的效率.如上图,我们要找到A4,必须先找到A3,再先找到A2,再先找到A1.这样的查找效率会大大降低.

好了,说了查找,再说说插入,数组的插入也相当的浪费效率,如果要在数组内的某一个位置进行插入,需要先将插入位置的前面复制一份,然后在新的数组后面添加新的元素,最后将旧的数组后半部分添加的新的数组后面,而在链表中插入就变得相当简单了,比如我要在A3和A4中插入B,只需定位到A3的指针和A4的数据即可,将A3的指针指向B的值,将B的指针指向A4的值,B就插入进了链表.

说了那么多,怎么能不来点实际的呢?那么我们就来测一测吧!

ArrayList和LinkedList插入操作测试

测试代码:


测试结果:经过几次反复执行,时间差大概是2ms


ArrayList和LinkedList查询操作测试



测试结果:很不稳定,但是多测几次大概是在2ms左右

总结一下:这个数据量算小的了,所有效果不是很明显,(提一下ArrayList底层数组貌似有一个扩容效率的问题哟!感兴趣的小伙伴可以查一查,很有用的),就是说面试的时候,大家回答的都是不同链表的特点,有时候面试官比较刁钻,刨根问底!这个答案介意借鉴一下!测试有什么不对的地方希望大家指出.互相学习哟~

  • 20
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值