LinkedList 源码分析

本文探讨了链表(特别是双向链表)与数组在数据结构上的差异,重点剖析了LinkedList的底层实现,包括节点关联方式、添加、查询和删除操作的源码分析。通过理解链表的高效增删特点和低查询效率,对比了它们在时间和空间复杂度上的优劣。
摘要由CSDN通过智能技术生成

LinkedList 底层链表结构分析

数组与链表数据结构区别
在数组中存放一种相同的元素按照一定的顺序存放;数组的存储空间是连续,占用内存比较大,所以它的发杂度空间很大;但是数组的查询效率非常高,故二分时间复杂度小。

算法的时间复杂度和空间复杂度:
算法的时间复杂度指的就是一个算法执行所耗费的时间0(1)
算法的空间复杂度指的就是一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间

所以:数组查询效率比较高、但是增删效率比较低,链表数据结构查询效率比较低,但是增删效率比较高;

源码:
在这里插入图片描述节点之间如何让关联起来的?
答:每一个元素都保存在一个节点对象中,该对象中有前一个节点数据和后一个节点数据,也就有可以找到前一个元素和后一个元素。如果前一个节点为bull 的话,说明当前节点为集合中第一个元素,当后一个节点为 null的时候,说明当前节点时最后一个节点。

所以: LinkedList 中有第一个节点和最后一个节点的节点属性。根据这种数据结构可以根据第一个节点找到所有节点。

在这里插入图片描述

添加方法源码分析

在这里插入图片描述
在这里插入图片描述### 元素查询源码分析
在这里插入图片描述首先检查index有没有越界:
在这里插入图片描述通过折半算法找到元素:
在这里插入图片描述

移除方法源码分析

通过元素移除:
在这里插入图片描述通过(下标) index移除:
在这里插入图片描述无论哪种方式,最后都需要通过unlink(node)方法移除节点。
在这里插入图片描述

总结

链表数据底层原理实现:双向链表头尾相接,

  1. 在底层中使用静态内部类Node节点存放节点元素三个属性, pred(关联的上一个节点)item当前的值next下一个节点
  2. Add 原理是如何实现一直在链表之后新增.
  3. Get原理链表缺点:查询效率非常低,所以inkeList_中采用折半查找范围查询定位
    node节点
  4. 删除原理:就是改变头尾相结合指向.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值