源码阅读之LinkedList实现细节

  • 时间:
  • 浏览:1

查看链表头节点

LinkedList 是实现了序列化接口 Serializable ,而以上属性都被声明为 transient 表示哪些地方地方字段不参与序列化。

这是通过列表来创建链表的。它调用了 addAll 方式。你你这名方式后文会讲到。

LinkedList 是一一两个多双向链表,这是一一两个多基础的数据行态。打开 LinkedList 源码,都必须就看它继承于 AbstractSequentialList ,你你这名是 AbstractList 的子类。一并也实现了 ListDequeCloneSerializable 接口。随后 繁杂的类关系图都必须表示为

你你这名方式稍微繁杂随后

都必须看出也是调用了 linkLast 方式。

在链表尾部上加一一两个多节点。它也是內部的 linkLast 方式。这方式执行带宽也很高,只必须改变指针指向,时间繁杂度是O(1)。

查询某个对象不是处在于该链表中是通过遍历来实现的。

删除头节点

在尾部插入一一两个多列表,通过调用 add(int,Collection) 来实现。

你你这名节点类,记录链表中的节点的数据,有前指针、后指针和具体的数据元素。你你这名数据这里用泛型来表示了。

获取头节点,并把头节点从链表中删除

获取 index 所在元素,通过 node 方式获取。前面分析都必须知道,你你这名方式必须遍历,它的时间繁杂度是O(n)。

同上

它实际是调用了內部的一一两个多私有方式 linkFirst 。只必须改变指针指向,时间繁杂度O(1)。

首先它会检查 index 不是正确。随后在 0~size 范围内的下标,没办法 就执行插入的方式;

在链表中要通过下标查找一一两个多节点,必须通过遍历。这里做了一一两个多优化,当 index 是在前半部分时从链表头部过后过后过后开使遍历;随后 index 超过当前链表的一几点几分 则从上方过后过后过后开使遍历查询,它的时间繁杂度为O(n)。

在某个 index 前插入元素。

在链表头部上加节点

查看链表头节点

查看链表尾部节点

你你这名是默认构造函数,创建一一两个多空链表。

在调用你你这名方式过后必须获取到节点

它会判断随后 index 是等于 size 没办法 就在尾部插入元素,随后就在 index 所在节点前面插入元素。

遍历整个链表,将节点中的数据置为 null

清空链表

获取尾部节点,并将尾部节点删除

你你这名方式在节点 succ 前面上加元素,时间繁杂度为O(1)。