Java面试题(9)ArrayList与LinkedList的区别

1、底层数据结构的差异

 ArrayList,数组,连续的内存空间,长度固定

 LinkedList,双向链表,不是连续的内存空间

2、一个常规的结论

ArrayList查询快,因为是连续的内存空间,增删慢,因为需要发生数据迁移

LinkedList查询慢,因为需要通过指针一个一个寻找, 但是删除插入快,因为只需改变前后节点的指针指向即可


这个结论不严谨,但是足够应付很多面试了

因为比如查找第2个元素

ArrayList 是连续的内存空间 可以计算偏移量找到元素

LinkedList 不是连续的内存空间 无法计算 只能一个一个往下找  

ArrayList > LinkedList

但是如果要找到b这个数据

ArrayList LinkedList 都得一个一个找,谁快谁慢就不一定了

3、假设要存储1000个对象的信息哪个更省内存?

ArrayList  数组,初始化好空间 就是1000  避免后期的扩容

LinkedList 双向链表,除了存数据之外还要存两个指针,一个指向头部,一个指向尾部,意味着多了2000个指针

所以ArrayList省内存

4、ArrayList细节分析

1、增加 

添加到末尾,正常不需要做特别的处理,除非现有的数组空间不够了,需要扩容

数组初始化容量为 10

怎么扩容?

当发现容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值