LinkedList鏈表

LinkedList 的全面說明

  • LinkList底層實現了雙向鏈表和雙端列特點
  • 可以添加任意元素(元素可以重復),包括null
  • 線程不安全,沒有實現同步

LinkedList 的底層操作機制

  • LinkedList底層維護了一個雙向鏈表
  • LinkList中維護了兩個屬性first和last分別指向 首節點和尾結點
  • 每個節點(Node對象),里面有維護了prev、next、item三個屬性
    prev:指向前一個
    next:指向后一個
    最終實現雙向鏈表
  • ListedList的元素的添加和刪除,不是通過數組完成的,相對來說效率高
  • 模擬一個簡單的雙向鏈表-代碼:
public class LinkedList_ {public static void main(String[] args) {//模擬一個簡單的雙向鏈表//1,創建Node對象Node jack = new Node("jack");Node tom = new Node("tom");Node zl = new Node("zl");//2,連接3個結點,形成雙向鏈表//      jack -> tom -> zljack.next = tom;tom.next = zl;//      zl -> tom -> jackzl.pre = tom;tom.pre = jack;//3,指定雙向鏈表的頭節點-jack;尾結點-zlNode first = jack;Node last = zl;//4,從頭到尾遍歷System.out.println("=======從頭到尾遍歷===========");while (true){if (first == null){break;}System.out.println(first);first = first.next;}//5,從尾到頭遍歷System.out.println("=====從尾到頭遍歷======");while (true){if (last==null){break;}System.out.println(last);last=last.pre;}//6,添加對象/數據System.out.println("======添加數據后======");Node add1 = new Node("add1");//添加到jack 和 tom 中間add1.next = tom;add1.pre=jack;tom.pre=add1;jack.next=add1;first = jack;while (true){if (first == null){break;}System.out.println(first);first = first.next;}System.out.println("=======添加數組后從后往前遍歷=========");last=zl;while (true){if (last==null){break;}System.out.println(last);last=last.pre;}}
}//定義一個Node類,Node對象,表示雙向鏈表的一個節點
class Node {public Object item;//真正存放數據public Node next;//指向后一個結點public Node pre;//指向前一個節點public Node(Object item) {this.item = item;}@Overridepublic String toString() {return "Node{" +"item=" + item +'}';}
}

結果
在這里插入圖片描述
LinkedList的增刪改查案例

public class LinkedListCRUD {@SuppressWarnings({"all"})public static void main(String[] args) {LinkedList linkedList = new LinkedList();linkedList.add(1);linkedList.add(2);linkedList.add(3);System.out.println("linkedList=" + linkedList);//刪除節點
//        linkedList.remove(); // 這里默認刪除的是第一個結點linkedList.remove(1);System.out.println("刪除后linkedList="+ linkedList);//修改某個節點  將index=1位置的對象修改為999linkedList.set(1,999);System.out.println("修改后的linkedList"+linkedList);//得到某個節點System.out.println("得到下標為1的對象"+linkedList.get(1));//遍歷方式,因為LinkedList 是實現了 List接口,因此遍歷方式為List的三個遍歷方式System.out.println("===LinkeList 遍歷迭代器====");Iterator iterator = linkedList.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.println(next);}System.out.println("===LinkeList 遍歷增強 for====");for (Object o:linkedList){System.out.println(o);}System.out.println("===LinkeList 遍歷普通 for====");for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));}}}

結果
在這里插入圖片描述

ArrayList 和 LinkedList 的比較

LinkedList的增刪改查

  • 增:1,創建結點對象;2,通過鏈表追加前后連接;3,遍歷
  • 刪: linkedList.remove(); // 這里默認刪除的是第一個結點
  • 改:linkedList.set(1,999); 將index=1位置的對象修改為999
  • 查:三種方式遍歷:1,遍歷迭代器;2,遍歷增強for;3,遍歷普通for

ArrayList的增刪改查

  • 增:擴容,創建新數組,復制,比較麻煩
  • 刪:創建新數組,復制,比較麻煩
  • 改:數組名[下標] 直接修改
  • 查:for循環遍歷
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/9872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/9872.shtml
英文地址,請注明出處:http://en.pswp.cn/web/9872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法入門賽】A.坐標變換(推薦學習)C++題解與代碼

比賽鏈接&#xff1a;https://www.starrycoding.com/contest/8 題目描述 武漢市可以看做一個二維地圖。 牢 e e e掌握了一項特異功能&#xff0c;他可以“瞬移”&#xff0c;每次瞬移需要分別設定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy&#xff0c;瞬移完成后位置會…

【Fastadmin】表格列改input框輸入編輯,以排序權重為例

目錄 1.自定義權重排序,以字段sort為例 js列代碼 在// 初始化表格table.bootstrapTable({ });的后面添加事件 api里面增加formatter方法,如果存在角色權限問題,控制器添

谷歌外鏈怎么發?

既要數量也要質量&#xff0c;要保證你的鏈接廣泛分布&#xff0c;在數量上&#xff0c;確實需要你的鏈接在各種平臺上有所展現&#xff0c;這樣能提升你網站的知名度和曝光率&#xff0c;但是&#xff0c;光有數量是不夠的&#xff0c;如果這些鏈接的內容不行&#xff0c;那對…

ARIMA模型在河流水質預測中的應用_含代碼

#水質模型 #時間序列 #python應用 ARIMA 時間序列模型簡介 時間序列是研究數據隨時間變化而變化的一種算法&#xff0c;是一種預測性分析算法。它的基本出發點就是事物發展都有連續性&#xff0c;按照它本身固有的規律進行。ARIMA(p,d,q)模型全稱為差分自回歸移動平均模型 (A…

SSH文件傳輸

一、設置SSH密鑰對&#xff0c;實現記住密碼 要避免每次使用scp或ssh時都輸入密碼&#xff0c;你可以設置SSH密鑰對&#xff08;一對公鑰和私鑰&#xff09;&#xff0c;并將公鑰添加到遠程服務器上。這樣&#xff0c;你的系統可以通過密鑰自動驗證身份&#xff0c;而無需手動…

Blazor入門-基礎知識+vs2022自帶例程的理解

參考&#xff1a; Blazor 教程 - 生成首個應用 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/intro Blazor基礎知識&#xff1a;Visual Studio 2022 中的Blazor開發入門_vs2022 blazor webassembly-CSDN博客 https://blog.csdn.net/mzl87/article/detail…

NSSCTF | [SWPUCTF 2021 新生賽]jicao

打開題目&#xff0c;發現高亮顯示了一個 php 腳本 這是腳本的內容 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;…

idea中數據庫的連接(保姆級)

點擊idea中的database 然后再點擊加號 創建 然后選擇第一欄data source 再選擇mysql 然后選擇數據庫的連接方式 再輸入密碼 這里我們本來就是localhost所有就不用改 選擇端口號 然后點擊Test Connection 測試連接 第一次連接會下載連接的文件 我們只需要 等待它下載完成就好了 …

文本批量操作指南:文本合并技巧,批量處理大量文本的方法

在數字化時代&#xff0c;文本處理成為我們日常生活和工作中不可或缺的一部分。無論是整理文檔、數據分析還是內容創作&#xff0c;我們都需要處理大量的文本數據。為了提升工作效率&#xff0c;掌握文本批量操作和合并的技巧變得尤為重要。本文將為您提供一份詳細的文本批量操…

機器學習算法應用——CART決策樹

CART決策樹&#xff08;4-2&#xff09; CART&#xff08;Classification and Regression Trees&#xff09;決策樹是一種常用的機器學習算法&#xff0c;它既可以用于分類問題&#xff0c;也可以用于回歸問題。CART決策樹的主要原理是通過遞歸地將數據集劃分為兩個子集來構建決…

力扣 256. 粉刷房子 LCR 091. 粉刷房子 python AC

動態規劃 class Solution:def minCost(self, costs):row, col len(costs), 3dp [[0] * col for _ in range(row 1)]for i in range(1, row 1):for j in range(col):dp[i][j] costs[i - 1][j - 1]if j 0:dp[i][j] min(dp[i - 1][1], dp[i - 1][2])elif j 1:dp[i][j] m…

【QT教程】QT6硬件高級編程實戰案例 QT硬件高級編程

QT6硬件高級編程實戰案例 使用AI技術輔助生成 QT界面美化視頻課程 QT性能優化視頻課程 QT原理與源碼分析視頻課程 QT QML C擴展開發視頻課程 免費QT視頻課程 您可以看免費1000個QT技術視頻 免費QT視頻課程 QT統計圖和QT數據可視化視頻免費看 免費QT視頻課程 QT性能優化視頻免…

【GoLang基礎】通道(channel)是什么?

問題引出&#xff1a; Go語言中的通道&#xff08;channel&#xff09;是什么&#xff1f; 解答&#xff1a; 通道&#xff08;channel&#xff09;是 Go 語言中用于協程&#xff08;goroutine&#xff09;之間通信和同步的機制。通道提供了一種安全、簡單且高效的方式&#x…

idea運行SpringBoot項目爆紅提示出現:Java HotSpot(TM) 64-Bit Server VM warning...讓我來看看~

在運行SpringBoot項目的時候&#xff0c;發現總有這個警告提示出現&#xff0c;有點強迫癥真的每次運行項目都很難受啊&#xff01;那么今天便來解決這個問題&#xff01; 先來看一下提示內容&#xff1a;Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none an…

FreeRTOS標準庫例程代碼

1.設備STM32F103C8T6 2.工程模板 單片機: 部分單片機的程序例程 - Gitee.comhttps://gitee.com/lovefoolnotme/singlechip/tree/master/STM32_FREERTOS/1.%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF 3.代碼 1-FreeRTOS移植模板 #include "system.h" #include "…

C語言編程中布爾設置位掩碼示例

在C語言編程中&#xff0c;當你想使用整數&#xff08;通常是unsigned int或uint8_t, uint16_t, uint32_t等&#xff09;的位來存儲多個布爾設置時&#xff0c;你會使用位掩碼。每個設置對應于整數中的一個位&#xff0c;你可以通過位操作&#xff08;如按位與&、按位或|、…

Rust:用 Warp 庫實現 Restful API 的簡單示例

直接上代碼&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…

uniap之微信公眾號支付

近來用uniapp開發H5的時候&#xff0c;需要接入支付&#xff0c;原來都是基于后端框架來做的&#xff0c;所以可謂是一路坑中過&#xff0c;今天整理下大致流程分享給大家。 先封裝util.js&#xff0c;便于后面調用 const isWechat function(){return String(navigator.userA…

隊列的實現(使用C語言)

完整代碼鏈接&#xff1a;DataStructure: 基本數據結構的實現。 (gitee.com) 目錄 一、隊列的概念&#xff1a; 二、隊列的實現&#xff1a; 使用鏈表實現隊列&#xff1a; 1.結構體設計&#xff1a; 2.初始化&#xff1a; 3.銷毀&#xff1a; 4.入隊&#xff1a; 5.…

OC foudation框架(下)的學習

OCfoudation框架&#xff08;下&#xff09; 前面學習了有關OCfoudation框架的部分內容&#xff0c;我們現在對于后面的內容繼續學習。 文章目錄 OCfoudation框架&#xff08;下&#xff09;數組&#xff08;NSArray和NSMutableArray&#xff09;對集合元素整體調用方法排序使用…