当前位置:网站首页>ArrayList LinkList效率对比
ArrayList LinkList效率对比
2022-08-02 03:28:00 【Encounter84】
由于老师上课的时候讲到了ArrayList LinkList效率不同,于是课下查找资料,并写了一个二者效率对比的小代码。
首先通过查找资料我了解到:1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedList还实现了Deque接口,它代表一个双向队列,因此LinkedList可以作为双向队列 ,栈和List集合使用。
2. 因为Array是基于索引的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。Array获取数据的时间复杂度是O(1),但是要插入、删除数据却是开销很大的,因为这需要移动数组中插入位置之后的的所有元素。
3. 相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回;但在插入,删除操作是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引。
4. LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。
首先我们测试ArrayList LinkList增加新的内容时效率上的区别。代码如下:
测试结果为:
可以看出array比link快。可能是因为在不修改指针的时候,在往数据末尾新增的时候速度还是比LinkList速度快。
然后测试插入操作:
结果为:
可以看出link确实比array快很多,因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。
边栏推荐
- electron-builder打包不成功解决方法
- cmake安装到指定目录
- 一文理解分布式开发中的服务治理
- OpenCore 黑苹果安装教程
- 库存现金、现金管理制度、现金的账务处理、银行存款、银行存款的账务处理、银行存款的核对
- 关于我的大创、论文~
- 管理会计(对内)指引、管理会计要素及其具体内容(可能考,考前记一下,推荐记一下四个大点即可)、
- Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
- uniapp | Problems with the use of the official map component
- laravel-admin FROM表单同行展示问题
猜你喜欢
随机推荐
C# 注释语法
kotlin语法总结(二)
Kotlin - 标准函数(with、run和apply)
一分钟get:缓存穿透、缓存击穿、缓存雪崩
View的滑动
借贷记账法下的账户结构、借贷记账法的记账规则、借贷记账法下的账户对应关系与会计分录
uniapp发布到微信小程序:分包、删减代码全过程
Google Hacking
Dart-Flutter DateTime日期转换
The CTF introduction of PHP file contains
PHP hash加密与解密
会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
Larave 自定义公共函数以及引入使用
RecyclerView使用和原理解析
二舅为什么能刷屏?这三件事对企业公关的启示
关于我的项目-微信公众号~
英语每日打卡
同时安装VirtualBox和VMware,虚拟机如何上网
Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
面试必备:Android性能分析与优化实战进阶手册