Java集合之LinkedList源碼分析

来源:https://www.cnblogs.com/hujingnb/archive/2019/01/02/10181576.html
-Advertisement-
Play Games

概述 LinkedLIst和ArrayLIst一樣, 都實現了List介面, 但其內部的數據結構不同, LinkedList是基於鏈表實現的(從名字也能看出來), 隨機訪問效率要比ArrayList差. 它的插入和刪除操作比ArrayList更加高效, 但還是要遍歷部分鏈表的指針才能移動到下標所指的 ...


概述

LinkedLIst和ArrayLIst一樣, 都實現了List介面, 但其內部的數據結構不同, LinkedList是基於鏈表實現的(從名字也能看出來), 隨機訪問效率要比ArrayList差. 它的插入和刪除操作比ArrayList更加高效, 但還是要遍歷部分鏈表的指針才能移動到下標所指的位置, 只有在鏈表兩頭的操作能省掉移動, 如add(), addFirest(), removeLast()等.

LinkedList源碼分析

1.數據結構

LinkedList是基於鏈表結構實現的, 在類中定義了頭尾指針. 其內部維護了一個雙向鏈表

Java集合之LinkedList

 

Java集合之LinkedList

 

2.構造方法

預設構造函數很簡單, 啥也沒有

Java集合之LinkedList

 

將集合的元素添加的LinkedList中:

Java集合之LinkedList

 

Java集合之LinkedList

 

Java集合之LinkedList

 

3.存儲

(1)add(E)在鏈表的末尾添加元素

Java集合之LinkedList

 

Java集合之LinkedList

 

(2)add(int, E)在指定的位置插入元素

Java集合之LinkedList

 

Java集合之LinkedList

 

Java集合之LinkedList

 

(3)addAll(Collection)將集合添加到鏈表末尾, 該方法在構造方法中介紹了, 在此不再贅述

Java集合之LinkedList

 

(4)addAll(int, Collection)將集合添加到鏈表的指定位置, 該方法也在構造方法中介紹了

Java集合之LinkedList

 

(5)addFirst(E)將元素添加到鏈表表頭位置

Java集合之LinkedList

 

Java集合之LinkedList

 

(6)addLast(E)將元素添加到表尾

Java集合之LinkedList

 

Java集合之LinkedList

 

4.獲取

Java集合之LinkedList

 

Java集合之LinkedList

 

Java集合之LinkedList

 

5.刪除

刪除方法不在給出源碼, 基本大同小異. 有如下方法:

  1. remove(): 刪除第一個元素並返回, 調用 removeFirst 方法
  2. remove(int): 刪除鏈表指定位置的元素
  3. remove(Object): 從鏈表中刪除首次出現的元素
  4. removeFirst(): 刪除並返回第一個元素
  5. removeLast(): 刪除並返回最後一個元素
  6. removeFirstOccurrence(Object): 從鏈表中刪除第一次出現的指定元素
  7. removeLastOccurrence(Object): 從鏈表中刪除最後一個出現的指定元素

LinkedList是一個功能強大的類, 可以當作List集合、隊列和棧來使用.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是進程、線程 進程可以簡單的理解為應用程式。多線程,相當於多個人共同完成一件事情,每個線程,獨立完成一件任務。因此,一個進程至少有一個線程,一個線程不能獨立存在,它必須是進程的一部分。 進程:每個獨立運行著的程式。具有獨立的記憶體空間和系統資源。(建大廈) 線程:是一個進程內部的一條執行路徑。 ...
  • 在軟體開發領域中,人們經常會用到這一個概念——“設計模式”(design pattern),它是一種針對軟體設計的共性問題而提出的解決方案。在一本聖經級的書籍《設計模式:可復用面向對象軟體的基礎》(1991年,Design Patterns - Elements of Reusable Object ...
  • `synchronized java 同步`的關鍵字,其典型的作用域如下所示. 1 對象鎖 1.1 代碼塊修飾(對象) 此時, 用於保證 函數中的被 大括弧包裹的代碼同步執行. 作用的對象為 的對象實例,例如 函數中的 以及 . Tips: 1. 若在多個線程中被調用,其輸出順序將保證同步,按照 的 ...
  • Django 為大家提供了一個完善的後臺管理系統—admin,但是這個後臺管理系統總體來說不太適合國人的習慣,所以有大神就使用 bootstrap 和 jQuery,為我們開發了一個第三 方的 Django 後臺管理系統—xadmin,這個界面的友好度比較高,目前企業的使用頻率比較高,我們來學習一些 ...
  • 標準輸入對話框(QInputDialog)系列: 主要模塊 效果如下: 完整代碼: 打開文件(QFileDialog)、顏色(QColorDialog)、字體(QFontDialog)對話框 效果如下: 參考: https://zhuanlan.zhihu.com/p/29321561 完整代碼: ...
  • 題意 "題目鏈接" Sol 介紹一種神奇的點分治的做法 啥?這都有根樹了怎麼點分治?? 嘿嘿,這道題的點分治不同於一般的點分治。正常的點分治思路大概是先統計過重心的,再遞歸下去 實際上一般的點分治與統計順序關係不大,也就是說我可以先統計再遞歸,或者先遞歸再統計。 但是這題不單單是統計,它是dp,存在 ...
  • 一、ORM簡介 MVC和MTV框架中包含一個重要部分,就是ORM,它實現了數據模型與資料庫的解耦,即數據模型的設計不需要依賴於特定的資料庫,通過簡單的配置就可以輕鬆更換資料庫。 ORM是‘對象-關係-映射’的簡稱 #sql中的表 #創建表: CREATE TABLE employee( id INT ...
  • 1.編譯型解釋型語言區別: 編譯型:一次性將全部代碼編譯成二進位文件,代表c,c++ 優點:執行效率高 缺點:開發速度慢,不能跨平臺 解釋型:當程式運行時,從上至下一行一行執行,解釋成二進位去執行 優點:開發速度快,效率高,可以跨平臺 缺點:運行效率低 2.python2和python3區別: py ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...