一、LinkedList 概述

  java.util.LinkedList  集合数据存储的结构是链表结构

  特点:增删快,查询慢

  LinkedList 是一个双向链表,如下图

  

   注意:该集合实现不是同步的,多线程的,速度快,效率高。

  扩展:LinkedList 集合也作为堆栈,队列的结构使用。

二、LinkedList 的结构

  LinkedList:双向链表结构(双向链表、队列、栈、双端队列、单向链表等各种数据结构的效果)

  LinkedList 内部有一个结点的类型:

  

   其中还有两个 Node 类型的变量 first与 last,分别来记录第一个结点的地址与最后一个结点的地址。

       

   思考:LinkedList 为什么可以被当做双向链表、栈、队列、双端队列等数据结构使用?

  1、如何体现双向链表的?

    LinkedList 中提供了大量首尾操作的方法:

void addFirst(E e) :将指定元素插入此列表的开头 
void addLast(E e):将指定元素添加到此列表的结尾 
E getFirst():返回此列表的第一个元素。 
E getLast():返回此列表的最后一个元素 
boolean offer(E e):将指定元素添加到此列表的末尾(最后一个元素)。 
boolean offerFirst(E e) :在此列表的开头插入指定的元素。 
boolean offerLast(E e):在此列表末尾插入指定的元素 
int indexOf(Object o):返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。 
int lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1 
E get(int index) :返回此列表中指定位置处的元素

  

  2、如何体现栈的?

    主要提供了操作栈常用方法:

 void push(E e) :将元素推入此列表所表示的堆栈 
 E peek():获取但不移除此列表的头(第一个元素)。 
 E peekFirst():获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。 
 E peekLast():获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null 
 E pop() :从此列表所表示的堆栈处弹出一个元素 

  3、如何体现队列的?(实现了Queue接口)

  抛出异常 返回特殊值
插入 add(e) offer(e)
移除 remove() poll()
检查 element() peek()

  4、如何体现双端队列?(JDK1.6才支持,实现了Deque(double ended queue(双端队列)))

    下表总结了12种方法

  第一个元素(头部) 最后一个元素(尾部)
  抛出异常 特殊值 抛出异常 特殊值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
移除 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()

三、常用方法

  1、构造方法

LinkedList() :构造一个空列表。 
LinkedList(Collection<? extends E> c) :构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。 

      源码跟踪:

   可以看出,无参的构造方法什么都没做。

  2、add(Object obj) 方法

   源码跟踪:

 

 

   解读:

  3、remove(Object obj) 方法

    源码跟踪:

   解读:

  4、getFirst() 方法

    源码跟踪:

 

 

  

posted on 2019-08-31 15:04  格物致知_Tony  阅读(660)  评论(0编辑  收藏  举报