LinkedList介绍

1. LinkedList 简介

  1. LinkedList是双向链表,大致长下面的样子

LinkedList - 图1

1.1 实现细节

  1. 基于JDK 1.8版本;
  2. public class LinkedList<E>
  3. extends AbstractSequentialList<E>
  4. implements List<E>, Deque<E>, Cloneable, java.io.Serializable

1.1.1 实现和继承关系

  • 继承 抽象类AbstractSequentialList,它也可以被当作堆栈、队列或双端队列进行操作;
  • 实现 List 接口,能对它进行队列操作。
  • 实现 Cloneable接口,即覆盖了clone()方法,能被克隆;
  • 实现 java.io.Serializable 接口,支持序列化,能通过序列化去传输;
  • 实现 Deque 接口,即能将LinkedList当作双端队列使用
  1. [继承关系]
  2. java.lang.Object
  3. java.util.AbstractCollection<E>
  4. java.util.AbstractList<E>
  5. java.util.AbstractSequentialList<E>
  6. java.util.LinkedList<E>

1.1.2 底层实现

1.1.2.1 主要成员
  • 节点Node
  1. private static class Node<E> {
  2. E item;
  3. Node<E> next;
  4. Node<E> prev;
  5. Node(Node<E> prev, E element, Node<E> next) {
  6. this.item = element;
  7. this.next = next;
  8. this.prev = prev;
  9. }
  10. }
  11. //链表由递归构成,双向节点存在一个prev的指向,指向上一个节点;
  12. //以及一个next的指向,指向下一个节点;
  13. //E item 说明保存的元素类型为泛型类型;
  • 头结点[即链表第一个节点]
  1. /**
  2. * Pointer to first node.
  3. * Invariant: (first == null && last == null) ||
  4. * (first.prev == null && first.item != null)
  5. */
  6. transient Node<E> first;
  • 尾节点[即链表最后一个节点]
  1. /**
  2. * Pointer to last node.
  3. * Invariant: (first == null && last == null) ||
  4. * (last.next == null && last.item != null)
  5. */
  6. transient Node<E> last;

1.1.2.2 方法分类
  1. LinkedList实现了ListDeque接口,源代码中具备了实现ListQueue的特性;
  2. 重点来看下LinkedList是如何实现栈(Stack)和Queue(队列)的功能的,主要体现在它的方法分类上:
  • LinkedList中等效 Queue方法 | Queue队列方法 | LinkedList等效方法 | 作用 | 返回值 | 非空判断 | | —- | —- | —- | —- | —- | | add(e) | addLast(e) | 队列尾部添加元素 | void | false | | offer(e) | offerLast(e) | 队列尾部添加元素 | boolean | false | | remove() | removeFirst() | 移除队列头部元素 | 泛型E | true | | poll() | pollFirst() | 移除队列头部元素 | 泛型E | false | | element() | getFirst() | 获取队列头部元素 | 泛型E | true | | peek() | peekFirst() | 获取队列头部元素 | 泛型E | false |
  • LinkedList中等效Stack的方法 | Stack栈方法 | LinkedList等效方法 | 实质调用 | 作用 | 返回值 | 非空判断 | | —- | —- | —- | —- | —- | —- | | push(e) | push(e) | addFirst | 栈中压入元素 | void | false | | pop(e) | pop(e) | removeFirst | 栈中弹出元素 | void | false | | peek(e) | peek(e) | peek(e) | 获取队列头部元素 | void | false |

2. LinkedList 高级特性

  • LinkedList线程不安全性
  • LinkedList模拟队列,栈实现数据结构操作(TODO :之后遇到会调重点的举例说明)