欢迎光临散文网 会员登陆 & 注册

面试精选9-谈ArrayList和LinkedList的区别(详细版)

2022-09-29 11:32 作者:架构风清扬-趣学旅程  | 我要投稿

1,底层数据结构的差异

ArrayList,数组,连续一块内存空间
LinkedList,双向链表,不是连续的内存空间

2,一个常规的结论

网络常见的标准答案,可以应付基础类的面试

ArrayList,查找快,因为是连续的内存空间,定位方便,但删除,插入慢,因为需要发生数据迁移
LinkedList,查找慢,因为需要通过指针一个个寻找,但删除,插入快,因为只要改变前后节点的指针指向即可。

3,ArrayList细节分析

1,增加

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

    • 数组初始化容量多大?10,当你知道需要存储多少数据时,建议在创建的时候,直接设置初始化大小

    • 怎么扩容?

      • 当发现容量不够之后,就进行扩容

      • 按原先数组容量的1.5倍进行扩容,位运算,下面是关键的源码

  • 再将原先数组的元素复制到新数组,Arrays

    • 添加到其他位置,这个时候需要做整体的搬迁

  • 2,删除

    • 删除末尾,并不需要迁移

    • 删除其他的位置,这个时候也需要搬迁

  • 3,修改

    • 修改之前,必须先定位

    • 根据定位-查找-ArrayList(数组是一段连续的内存空间,定位会特别快)

    • 但是,根据内容查找,则依然需要遍历

  • 4,查找

    • 如上所述


面试精选9-谈ArrayList和LinkedList的区别(详细版)的评论 (共 条)

分享到微博请遵守国家法律