数组与链表的区别

以下内容为个人理解整理 如有不正确的地方还请大家多多指正 共同学习 一起进步。

万变不离其中 不管做什么事要知其然知其所以然,好的基础是成功的一半。

数组:数组在内存上是一块连续的内存空间,这也是为什么可以随机访问的原因,因为在内存上是连续的,所以元素都是紧邻的,只要一个一个访问即可。

链表:链表说我怎么就不能随机访问呢,因为链表在内存上是不连续的,是分散的,所有链表中的元素不是紧邻的,我们只有知道了上一个节点的信息,才能知道下一个节点的内容,当然了链表也有单链表和双链表之分,单链表即节点中存放了下一个节点的地址,双链表顾名思义,节点中不但存放了下一个节点的地址,也存放了上一个节点地址。

数组:数组容量大小一但确定了就不能改变,所以这也是我们常常在编写程序时常范的错误,数组越界 java.lang.ArrayIndexOutOfBoundsException: 2

链表: 链表说这你就不行了吧,我的大小可以随意改变,链表可以动态的去改变自己的容量大小,而不会担心会数组越界。

数组:数组在增加和删除上效率是比较低的,为什么呢?因为每次增加或者删除数组中的元素所在的内存地址都要重新进行移动。

链表:这点数组就不行了吧,链表在增加和删除上效率还是蛮高的,因为只要改变节点中保存的地址值即可,而不用进行内存地址的移动。

再补充一点为什么数组的查询速度比链表的查询速度要快,大家可能以为时间复杂度都是O(n),但其实不然,实际上数组的查询速度是比链表要快的,为什么呢?这就涉及到cpu与内存之间的关系了,大家在工作中最常听的一句话就是拿到内存中去处理,而不是频繁的与硬盘进行IO上的交互,与这个道理类似,因为CPU在缓存上的处理速度要比在内存上快,同时缓存中只能存储内存地址连续的元素,因为数组在内存中数据地址是连续的,所以CPU可以直接在缓存中处理数组,而链表只能在内存中进行处理,效率上会慢一些。

以上为数组与链表的一些区别,如果同志们有新的见解可以在下方评论,大家一起探讨,共同进步。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值