ArrayList和LinkedList的区别

首先,ArrayList的底层数据结构是一个动态扩容的数组,LinkedList的底层数据结构是一个双向链表。

其次,由于ArrayList的底层是一个数组,由于有下标索引,所以ArrayList支持数据的随机访问,其时间复杂度为O(1),而LinkedList底层是一个链表,当我们想要随机访问某一个元素时,只能通过遍历整个链表的形式来查询对应的元素,其时间复杂度为O(N),所以,在需要大量、频繁随机读取元素的场景中,ArrayList是更合适的选择

然后,就是数据的插入和删除这块,头插和头删这块,由于LinkedList的底层是一个双向链表,此时只需要调整头指针即可,时间复杂度为O(1),由于ArrayList的头插涉及到数据的迁移,其头插的效率是不如LinkedList的

尾插情况下,如果尾插时ArrayList没有扩容操作,此时只需在对应的位置插入数据即可,但是尾插时如果触发的扩容操作,此时涉及到数组复制的操作,效率就会变低,而LinkedList尾插时只需要调整尾指针即可

然后就是尾删的情况,尾删的情况下,ArrayList和LinkedList的效率是差不多的

但是由此可见,LinkedList适合用户数据的频繁的删除和插入的场景下使用

相关推荐
rannn_11124 分钟前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
leisoo809736 分钟前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴1 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
IKUN家族2 小时前
Spring IoC&DI
java·spring·rpc
一只旭宝2 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
山荷枝3 小时前
03-框架--Spring
java·后端·spring
ChaHae-In4 小时前
SpringBoot统一功能处理
java·spring boot·后端
coder!mq4 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding4 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ4 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio