源码阅读之LinkedList实现细节

  • 时间:
  • 浏览:3

删除头节点

在某个 index 前插入元素。

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

你这一 依据在节点 succ 前面加带元素,时间繁杂度为O(1)。

这是通过列表来创建链表的。它调用了 addAll 依据。你这一 依据后文会讲到。

查看链表尾部节点

在链表头部加带节点

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

可不需用看出也是调用了 linkLast 依据。

首先它会检查 index 算是正确。事先在 0~size 范围内的下标,如此就执行插入的依据;

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

它会判断事先 index 是等于 size 如此就在尾部插入元素,或者就在 index 所在节点前面插入元素。

在链表尾部加带1个 多节点。它也是外部的 linkLast 依据。这依据执行效率也很高,只需用改变指针指向,时间繁杂度是O(1)。

在调用你这一 依据事先需用获取到节点

查看链表头节点

查询某个对象算是趋于稳定于该链表中是通过遍历来实现的。

查看链表头节点

清空链表

获取 index 所在元素,通过 node 依据获取。前面分析可不需用知道,你这一 依据需用遍历,它的时间繁杂度是O(n)。

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

LinkedList 是1个 多双向链表,这是1个 多基础的数据行态。打开 LinkedList 源码,可不需用想看 它继承于 AbstractSequentialList ,你这一 是 AbstractList 的子类。一起也实现了 ListDequeCloneSerializable 接口。可是繁杂的类关系图可不需用表示为

同上

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

在链表中要通过下标查找1个 多节点,需用通过遍历。这里做了1个 多优化,当 index 是在前半次要时从链表头部始于英文遍历;事先 index 超过当前链表的一九时则从里面始于英文遍历查询,它的时间繁杂度为O(n)。

你这一 依据稍微繁杂有些

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

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

它实际是调用了外部的1个 多私有依据 linkFirst 。只需用改变指针指向,时间繁杂度O(1)。