LinkedList 源码解析
整体架构
LinkedList 底层数据结构是一个双向链表,整体结构如下图所示:
上图代表了一个双向链表结构,链表中的每个节点都可以向前或者向后追溯,我们有几个概念如下:
1、链表每个节点我们叫做 Node,Node 有 prev 属性,代表前一个节点的位置,next 属性,
2、代表后一个节点的位置;
3、first 是双向链表的头节点,它的前一个节点是 null。
4、last 是双向链表的尾节点,它的后一个节点是 null;
5、当链表中没有数据时,first 和 last 是同一个节点,前后指向都是 null;
6、因为是个双向链表,只要机器内存足够强大,是没有大小限制的。
链表中的元素叫做 Node,我们看下 Node 的组成部分:
源码解析:
1、新增
追加节点时,我们可以选择追加到链表头部,还是追加到链表尾部,add 方法默认是从尾部开始追加,addFirst 方法是从头部开始追加,我们分别来看下两种不同的追加方式:
从尾部追加(add)
从头部追加(addFirst)
2 节点删除
节点删除的方式和追加类似,我们可以选择从头部删除,也可以选择从尾部删除,删除操作会把节点的值,前后指向节点都置为 null,帮助 GC 进行回收
3 节点查询 采用二分查找法
总结
LinkedList 适用于要求有顺序、并且会按照顺序进行迭代的场景,主要是依赖于底层的链表结构

浙公网安备 33010602011771号