面试精选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,查找
如上所述