LinkedList 的概述
LinkedList 的继承体系图:第一步打开 IntelliJ IDEA 找到你要查看的类 ,第二步点击右键,选择 Diagrams 选择二级菜单的任意一项,就可以得到下面这样一个体系图,可以通过这篇文章来了解下 使用IntelliJ IDEA查看类的继承关系图形 。
图中蓝色实线箭头是指继承关系 ,绿色虚线箭头是指接口实现关系。
- LinkedList 继承自 AbstrackSequentialList 并实现了 List 接口以及 Deque 双向队列接口,因此 LinkedList 不但拥有 List 相关的操作方法,也有队列的相关操作方法。
- LinkedList 和 ArrayList 一样实现了序列化接口
Serializable
和Cloneable
接口使其拥有了序列化和克隆的特性。
LinkedList 一些主要特性:
- LinkedList 集合底层实现的数据结构为双向链表
- LinkedList 集合中元素允许为 null
- LinkedList 允许存入重复的数据
- LinkedList 中元素存放顺序为存入顺序。
- LinkedList 是非线程安全的,如果想保证线程安全的前提下操作 LinkedList,可以使用
**List list = Collections.synchronizedList(new LinkedList(...));**
来生成一个线程安全的 LinkedList
每个节点上有三个字段:当前节点的数据字段(data),指向上一个节点的字段(prev),和指向下一个节点的字段(next)。
LLink | Data | RLink |
---|---|---|
LinkedList 双向链表实现及成员变量
LinkedList 主要成员变量有下边三个:
//LinkedList 中的节点个数
transient int size = 0;
//LinkedList 链表的第一个节点
transient Node<E> first;
//LinkedList 链表的最后一个节点
transient Node<E> last;
如果我们保存了 LinkedList 的头尾两端,当我们需要以索引来查找节点的时候,我们可以根据 index 和 size/2 的大小,来决定从头查找还是从尾部查找,这也算是一定程度上弥补了单链表数据结构的缺点。
原文:https://juejin.cn/post/6844903586095169549#heading-3