分析&回答
ArrayList 底层基于动态数组实现,LinkedList 底层基于链表实现。
查询角度
ArrayList 通过 index 直接定位到数组对应位置的节点,而 LinkedList需要从头结点或尾节点开始遍历,直到寻找到目标节点,因此在效率上 ArrayList 优于 LinkedList。
插入、删除角度
- 随机插入和删除
ArrayList 需要移动目标节点后面的所有节点,而 LinkedList 只需修改目标节点前后节点的 next 或 prev 属性即可,因此在效率上 LinkedList 优于 ArrayList。 - 顺序插入和删除
由于 ArrayList 不需要修改上一个节点,且效率微胜 LinkedList 。又因为大部分情况下我们的使用都是顺序插入,所以在实际生产中更多使用 ArrayList。
反思&扩展
- 数组是顺序存储结构,链表是链式存储结构
- 数组是把所有元素按顺序进行存储,而链表则是通过指针连接元素与元素
- 数组要分配固定大小的连续空间
- ArrayList是动态数组,默认容量是10,每次扩容都为原来容量的1.5倍,扩容时将所有数据Copy到新对象。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!