最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的List集合框架之LinkedList詳細(xì)解析

 更新時間:2023年11月16日 10:17:11   作者:進擊的貓  
這篇文章主要介紹了Java的List集合框架之LinkedList詳細(xì)解析,LinkedList底層是內(nèi)部Node類的存儲,prev、next、item值,同時最外層還有first、last節(jié)點,需要的朋友可以參考下

(一)List子父層級:

LinkedList繼承實現(xiàn)關(guān)系

  • List接口繼承于Collection,Collection繼承Iterable;
  • LIst接口實現(xiàn)類分為:Vector、ArrayList、LinkedList;

(二)List實現(xiàn)類

1、LinkedList實現(xiàn)類

(1)LinkedList底層是內(nèi)部Node類的存儲,prev、next、item值,同時最外層還有first、last節(jié)點;

(2)LinkedList是線程不安全的,多線程環(huán)境會報并發(fā)修改異常java.util.ConcurrentModificationException。

(3)LinkedList無擴容機制,底層是雙向鏈表結(jié)構(gòu),內(nèi)部是Node結(jié)構(gòu),外部是first、last首尾節(jié)點。

2、常見源碼

(1)構(gòu)造方法:

//無參構(gòu)造,有參構(gòu)造是將一個LinkedList對象傳入進行追加(數(shù)據(jù)復(fù)制)
	public LinkedList() {   }

(2)add方法:

   public boolean add(E e) {
      linkLast(e);//將e以尾插法入鏈表
      return true;
    }
    //新數(shù)據(jù)入鏈表
    void linkLast(E e) {
        final Node<E> l = last;//獲取尾節(jié)點
        final Node<E> newNode = new Node<>(l, e, null);//調(diào)用Node構(gòu)造方法進行入鏈表
        last = newNode;//修改最新尾節(jié)點
        if (l == null)//判定是否為第一個鏈表節(jié)點
            first = newNode;//設(shè)置為第一個節(jié)點
        else
            l.next = newNode;//將新節(jié)點與舊節(jié)點相連
        size++;//數(shù)量自增
        modCount++;//操作鏈表自增
    }
    //內(nèi)部類Node,用于鏈表底層數(shù)據(jù)存儲
    private static class Node<E> {
        E item;//存儲值類型泛型
        Node<E> next;//下一節(jié)點
        Node<E> prev;//上一節(jié)點
        //基于構(gòu)造方法進行鏈表構(gòu)造
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;//當(dāng)前節(jié)點存儲值
            this.next = next;//設(shè)置當(dāng)前新節(jié)點的下一節(jié)點值
            this.prev = prev;//設(shè)置當(dāng)前新節(jié)點的上一節(jié)點值
        }
    }

(3)remove方法:

 //列舉根據(jù)值刪除,不列舉按索引刪除remove,邏輯大體差不多
  public boolean remove(Object o) {
     if (o == null) {//空值刪除
         for (Node<E> x = first; x != null; x = x.next) {
             if (x.item == null) {
                 unlink(x);//調(diào)用刪除方法
                 return true;
             }
         }
     } else {
         for (Node<E> x = first; x != null; x = x.next) {
             if (o.equals(x.item)) {
                 unlink(x);//調(diào)用刪除方法
                 return true;
             }
         }
     }
     return false;
   }
   //刪除節(jié)點方法,將節(jié)點的前后節(jié)點進行連接,然后將自身置空,其中判定首節(jié)點和尾節(jié)點為空處理
   E unlink(Node<E> x) {
       final E element = x.item;//刪除節(jié)點值
       final Node<E> next = x.next;//刪除節(jié)點的下一節(jié)點
       final Node<E> prev = x.prev;//刪除節(jié)點的上一節(jié)點
       if (prev == null) {//上一節(jié)點那為空
           first = next;//設(shè)置新的首節(jié)點
       } else {
           prev.next = next;//將刪節(jié)點的前后鏈接(前節(jié)點)
           x.prev = null;//置空當(dāng)前節(jié)點的prev值
       }
       if (next == null) {//刪除節(jié)點下一節(jié)點為空
           last = prev;//設(shè)置新的尾節(jié)點
       } else {
           next.prev = prev;//刪除節(jié)點的前后鏈接(針對后節(jié)點)
           x.next = null;//置空當(dāng)前節(jié)點的next值
       }
       x.item = null;//置空當(dāng)前節(jié)點值
       size--;//數(shù)量減一
       modCount++;//操作次數(shù)自增
       return element;//返回刪除節(jié)點值
   }

(4)get方法:

 public E get(int index) {
    checkElementIndex(index);//是否在正常范圍內(nèi),index>=0&&index<size
     return node(index).item;//返回指定索引節(jié)點值
 }
 //根據(jù)索引值返回節(jié)點,根據(jù)二分法(折半)查找
 Node<E> node(int index) {
     if (index < (size >> 1)) {//前半部分查找
         Node<E> x = first;//首節(jié)點
         for (int i = 0; i < index; i++)
             x = x.next;//獲得指定索引節(jié)點
         return x;//返回節(jié)點
     } else {
         Node<E> x = last;//尾節(jié)點
         for (int i = size - 1; i > index; i--)
             x = x.prev;//從后往前查找,找到指定索引節(jié)點
         return x;//返回節(jié)點
     }
 }

(5)set方法:

 //指定索引位置進行設(shè)值
  public E set(int index, E element) {
      checkElementIndex(index);//檢查索引是否合法
      Node<E> x = node(index);//獲取索引節(jié)點
      E oldVal = x.item;//原索引節(jié)點值
      x.item = element;//設(shè)值
      return oldVal;//返回舊值
  }

3、總結(jié)

(1)LinkedList是線程不安全,多線程環(huán)境會造成并發(fā)修改異常java.util.ConcurrentModificationException;

(2)LinkedList是一個雙向鏈表結(jié)構(gòu)(無擴容機制),內(nèi)部是Node,外部是首尾節(jié)點first、last。

到此這篇關(guān)于Java的List集合框架之LinkedList詳細(xì)解析的文章就介紹到這了,更多相關(guān)List集合框架之LinkedList內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis參數(shù)類型不匹配錯誤argument type mismatch的處理方案

    mybatis參數(shù)類型不匹配錯誤argument type mismatch的處理方案

    這篇文章主要介紹了mybatis參數(shù)類型不匹配錯誤argument type mismatch的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot工程中使用filter過程解析

    Springboot工程中使用filter過程解析

    這篇文章主要介紹了springboot工程中使用filter過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • LiteFlow輕量級工作流引擎使用示例詳解

    LiteFlow輕量級工作流引擎使用示例詳解

    這篇文章主要介紹了LiteFlow 是一個靈活、簡潔且輕量的工作流引擎,適合用于中小型項目和微服務(wù)架構(gòu)中的流程編排,本文給大家介紹LiteFlow輕量級工作流引擎使用示例,感興趣的朋友一起看看吧
    2025-06-06
  • Java中實現(xiàn)兩個線程交替運行的方法

    Java中實現(xiàn)兩個線程交替運行的方法

    這篇文章主要介紹了Java中實現(xiàn)兩個線程交替運行的方法,本文將給大家分享操作流程,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • java線程中斷?interrupt?和?LockSupport解析

    java線程中斷?interrupt?和?LockSupport解析

    這篇文章主要為大家介紹了java線程中斷?interrupt?和?LockSupport示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 利用MultipartFile實現(xiàn)文件上傳功能

    利用MultipartFile實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了利用MultipartFile實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java版本管理工具jenv的實現(xiàn)

    java版本管理工具jenv的實現(xiàn)

    jenv是一個專注于管理多個Java版本的工具,適合需要在不同項目或環(huán)境中切換Java版本的開發(fā)者,支持插件擴展,并且可以與其他開發(fā)工具無縫集成,感興趣的可以了解一下
    2025-07-07
  • SpringBoot自動裝配注解的實現(xiàn)示例

    SpringBoot自動裝配注解的實現(xiàn)示例

    本文主要介紹了SpringBoot自動裝配注解的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • 關(guān)于Jackson的JSON工具類封裝 JsonUtils用法

    關(guān)于Jackson的JSON工具類封裝 JsonUtils用法

    這篇文章主要介紹了關(guān)于Jackson的JSON工具類封裝 JsonUtils用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java輸出鏤空金字塔實現(xiàn)案例

    java輸出鏤空金字塔實現(xiàn)案例

    小編最近接到領(lǐng)導(dǎo)安排,要求根據(jù)用戶輸入,打印出相應(yīng)層數(shù)的鏤空金字塔效果,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09

最新評論

辽宁省| 江津市| 惠东县| 长海县| 红安县| 周宁县| 姜堰市| 上犹县| 南平市| 安庆市| 五家渠市| 合肥市| 泰兴市| 张北县| 麟游县| 陇川县| 施甸县| 崇明县| 城市| 曲松县| 安平县| 墨竹工卡县| 左贡县| 西盟| 桃江县| 饶平县| 寻乌县| 思南县| 乌拉特前旗| 岐山县| 瓦房店市| 丽江市| 汉沽区| 绥滨县| 尼木县| 临潭县| 白山市| 卢湾区| 资兴市| 永川市| 阿拉尔市|