LinkedList 的概述

LinkedList 的继承体系图:第一步打开 IntelliJ IDEA 找到你要查看的类 ,第二步点击右键,选择 Diagrams 选择二级菜单的任意一项,就可以得到下面这样一个体系图,可以通过这篇文章来了解下 使用IntelliJ IDEA查看类的继承关系图形
image.png

图中蓝色实线箭头是指继承关系 ,绿色虚线箭头是指接口实现关系。

  • LinkedList 继承自 AbstrackSequentialList 并实现了 List 接口以及 Deque 双向队列接口,因此 LinkedList 不但拥有 List 相关的操作方法,也有队列的相关操作方法。
  • LinkedList 和 ArrayList 一样实现了序列化接口 SerializableCloneable 接口使其拥有了序列化和克隆的特性。


LinkedList 一些主要特性:

  1. LinkedList 集合底层实现的数据结构为双向链表
  2. LinkedList 集合中元素允许为 null
  3. LinkedList 允许存入重复的数据
  4. LinkedList 中元素存放顺序为存入顺序。
  5. LinkedList 是非线程安全的,如果想保证线程安全的前提下操作 LinkedList,可以使用 **List list = Collections.synchronizedList(new LinkedList(...));** 来生成一个线程安全的 LinkedList


每个节点上有三个字段:当前节点的数据字段(data),指向上一个节点的字段(prev),和指向下一个节点的字段(next)。

LLink Data RLink

LinkedList 双向链表实现及成员变量

LinkedList 主要成员变量有下边三个:

  1. //LinkedList 中的节点个数
  2. transient int size = 0;
  3. //LinkedList 链表的第一个节点
  4. transient Node<E> first;
  5. //LinkedList 链表的最后一个节点
  6. transient Node<E> last;

如果我们保存了 LinkedList 的头尾两端,当我们需要以索引来查找节点的时候,我们可以根据 index 和 size/2 的大小,来决定从头查找还是从尾部查找,这也算是一定程度上弥补了单链表数据结构的缺点。

原文:https://juejin.cn/post/6844903586095169549#heading-3