zoukankan      html  css  js  c++  java
  • Java 之 LinkedList 集合

    一、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() 方法

        源码跟踪:

      

  • 相关阅读:
    Java多线程详解
    自动化构建工具Maven
    解决 安装cocoapods失败,提示 requires Ruby version >=2.2.2
    安装Cocoapods时候ERROR: While executing gem ... (Errno::EPERM)
    iOS可执行文件瘦身方法
    ios webview自适应实际内容高度4种方法
    iOS8 tableview separatorInset cell分割线左对齐,ios7的方法失效了
    Reveal1.5破解,iOS_UI调试利器Reveal最新版本破解方法
    Xcode安装插件,错误选择了Skip Bundles,重新出现Load Bundles方法
    10分钟搞定支付宝支付 的 各种填坑
  • 原文地址:https://www.cnblogs.com/niujifei/p/11439075.html
Copyright © 2011-2022 走看看