LinkedList 底层链表结构分析
数组与链表数据结构区别
在数组中存放一种相同的元素按照一定的顺序存放;数组的存储空间是连续,占用内存比较大,所以它的发杂度空间很大;但是数组的查询效率非常高,故二分时间复杂度小。
算法的时间复杂度和空间复杂度:
算法的时间复杂度指的就是一个算法执行所耗费的时间0(1)
算法的空间复杂度指的就是一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间
所以:数组查询效率比较高、但是增删效率比较低,链表数据结构查询效率比较低,但是增删效率比较高;
源码:
节点之间如何让关联起来的?
答:每一个元素都保存在一个节点对象中,该对象中有前一个节点数据和后一个节点数据,也就有可以找到前一个元素和后一个元素。如果前一个节点为bull 的话,说明当前节点为集合中第一个元素,当后一个节点为 null的时候,说明当前节点时最后一个节点。
所以: LinkedList 中有第一个节点和最后一个节点的节点属性。根据这种数据结构可以根据第一个节点找到所有节点。
添加方法源码分析
### 元素查询源码分析
首先检查index有没有越界:
通过折半算法找到元素:
移除方法源码分析
通过元素移除:
通过(下标) index移除:
无论哪种方式,最后都需要通过unlink(node)方法移除节点。
总结
链表数据底层原理实现:双向链表头尾相接,
- 在底层中使用静态内部类Node节点存放节点元素三个属性, pred(关联的上一个节点)item当前的值next下一个节点
- Add 原理是如何实现一直在链表之后新增.
- Get原理链表缺点:查询效率非常低,所以inkeList_中采用折半查找范围查询定位
node节点 - 删除原理:就是改变头尾相结合指向.