| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> ArrayList和LinkedList的区别看这一篇就够了! -> 正文阅读 |
|
[数据结构与算法]ArrayList和LinkedList的区别看这一篇就够了! |
但是,任何技术的好坏都是要看场景的...而且,LinkedList增删真的快吗? 关于ArrayList和LinkedList的区别,个人认为要结合底层数据结构来看查询和增删两个操作带来的影响。 查询比较ArrayList底层是数组,数组的存储空间是连续的,可以根据寻址方式直接找到对应的元素位置,时间复杂度是O(1)。 举个例子:在一条正规有门牌的街上,你知道第一家店是001号,那么008肯定就在第8间,你直接过去就好了。啪一下,很快啊! 但LinkedList底层是链表,存储空间不连续,需要通过指针关联,在查询过程中需要不断跳转新的地址。 举个例子,可能不准确:你想要找一家网红店,结果到了店里,店员告诉你找错了,这是分店3号,并给了你总店的地址,你开车到了总店,结果经理又告诉你业务扩张太快了,这家已经不是总店了,总店在xx路100号... 这就是ArrayList比LinkedList查询快的原因。 增删比较我们都知道Java原生的数组是不能扩容的,如果我初始化时申请5个元素空间,那么就至多能存5个元素,不会因为我长得帅就包容一些。 ArrayList底层也是数组,但人家支持动态扩容,所以ArrayList人称“动态数组”。什么意思呢? 假设你原始容量为4,那么插入新元素时就会触发扩容,一定几率还会触发元素拷贝,而数组扩容和元素拷贝是耗时操作,这也是ArrayList被喷增删慢的原因。但是,ArrayList增删元素必然会触发扩容和拷贝吗?NO: 插入同理,空间足够时,尾部插入不涉及元素拷贝 那么LinkedList在增删的表现如何呢?理想情况下,链表的增删操作时间复杂度确实为O(1): 我虽然没有像计算机科班的同学那样系统学过数据结构与算法,但是所谓的链表时间复杂度是O(1)是有前提的:你必须先找到元素要插入或删除的位置!就好比你要拆除某一间房子,你必须先找到那一间房子呀! JDK源码论证LinkedList的查询相对ArrayList慢一些,这个没有疑问,那么两者增删效率如何呢? 当前得到的信息是:
所以LinkedList增删的效率是综合的结果。最后一句话,可以在LinkedList的API中找到论证: 底层需要根据节点指针遍历,时间复杂度O(N) 而反观ArrayList的get(index): ArrayList的get操作直接根据数组下标得到元素,底层是寻址,不用遍历,时间复杂度O(1) 总的来说就是: ArrayList:查询O(1),增删可能涉及数组扩容和拷贝(不是100%) LinkedList:查询O(N),增删O(1),但增删要先找到元素位置 如果ArrayList初始化时分配恰当的容量,可以避免频繁的扩容和拷贝,甚至不用扩容和拷贝。如果你有兴趣自己动手试验一下,会发现其实除了头插入和头删除,LinkedList几乎完败。 本文就是ArrayList和LinkedList的区别总结,希望对大家有帮助哈~~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 16:49:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |