一:LinkedList特征
1、LinkedList底层是一个双向链表,可以被当做 堆栈、队列、双端队列 来使用。【能且应该仅被作为 栈、队列、双端队列 来使用!】
双向链表,又称为“双向循环链表”,每个数据结点中都有两个引用,分别指向直接后继和直接前驱节点,可以理解为它是一个“首尾相接”的环形链表。
从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,从而可以从任意一个结点开始往后或者往前遍历完整个链表。
2、LinkedList的操作不是线程安全的,建议在单线程环境下使用。多线程中可以选择JUC并发包中的LinkedBlockingDeque。
3、因为底层是双向链表,那么它的顺序访问会[从表头开始迭代访问]非常高效,而随机访问[只查找某具体节点]效率比较低。
4、因为双向链表添加元素只是新增一个节点,延长链表而已,因此LinkedList 不存在容量不足的问题
二:LinkedList继承与实现关系
1、继承层次
java.lang.Object
↳ java.util.AbstractCollection↳ java.util.AbstractList↳ java.util.AbstractSequentialList↳ java.util.LinkedList
2、类定义与实现
public class LinkedList
extends AbstractSequentialList
implements List, Deque, Cloneable, java.io.Serializable {}
1)LinkedList 继承于AbstractSequentialList,AbstractSequentialList 实现了get(int index)、set(int index, E element)、add(int index, E element) 和 remove(int index)等方法,支持随机访问List。
2)LinkedList 实现 了 List 接口,因此具备了 队列操作的方法。
3)LinkedList 实现 了 Deque 接口,因此具备了 双端队列操作方法。
4)LinkedList 实现了Cloneable接口,即重写 clone(),支持克隆。
5)LinkedList 实现了java.io.Serializable接口,支持序列化。
三:LinkedList原理
LinkedList的本质是双向链表,包含两个重要的成员变量:header 和 size。
1)header是双向链表节点类Entry的实例,LinkedList中只需要存放表头节点即可,表头header不包含数据,只存放前驱节点和后继节点的引用,其中:表头的前驱节点就是双向链表的最后一个元素节点,表头的后继节点就是双向链表的第一个元素节点。
Entry节点类中包含三个重要的成员变量: previous, next, element。previous是该节点的上一个节点,next是该节