Java復習-集合篇

集合

集合分為倆大類

  • 單列集合
    • 每個元素數據只包含一個值
  • 雙列集合
    • 每個元素包含倆個鍵值對

image-20240526084729889

Conllection單列集合

單列集合常用的主要是下列幾種

image-20240526085320294

List集合

List系列集合的特點:添加元素是有序、可重復、有索引

這里我們來試一下ArrayList

        ArrayList<String> list = new ArrayList<>();list.add("java1");list.add("java2");list.add("java1");list.add("java2");System.out.println(list);

image-20240526090326298

ArrayList底層原理

基于數據實現

特點:索引查詢快,添加刪除慢

  1. 利用無參構造器創建集合,會在底層創建一個默認長度為0的數組

    image-20240526095455113

  2. 添加第一個元素,底層會創建一個新的長度為10的素組

    image-20240526095511543

  3. 存滿時,會擴容1.5倍

  4. 如果一次添加多個數據,1.5倍還放不下,則會以實際為準

應用場景

  1. 適合:根據索引查詢數據,比如根據隨機索引取數據,或者數據量不是很大的
  2. 不適合:數據量大的同時,又要頻繁的進行增刪操作

LinkedList底層原理

基于雙鏈表實現

特點:查詢慢、增刪快,尤其是首尾節點速度

image-20240526100236092

應用場景

  1. 設計隊列 (queue適用于校號系統、排隊系統)

    image-20240526100333799

    
    /**
    * 模擬隊列
    */
    LinkedList<String> queue = new LinkedList<>();//入隊
    queue.addLast("第一個人");
    queue.addLast("第二個人");
    queue.addLast("第三個人");
    queue.addLast("第四個人");
    System.out.println(queue);//出隊
    System.out.println(queue.removeFirst());
    System.out.println(queue.removeFirst());
    System.out.println(queue.removeFirst());
    System.out.println(queue);
    

    image-20240526101734173

  2. 設計棧(Stack)

/*
* 模擬棧
* */
LinkedList<String> stack = new LinkedList<>();
//入棧
stack.push("第一顆子彈");
stack.push("第二顆子彈");
stack.push("第三顆子彈");
stack.push("第四顆子彈");
System.out.println(stack);//出棧 
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack);

注意這里的 push 和 pop 就是addfirst 和 removeFirst

image-20240526101539112

image-20240526101621169

Set集合

Set系列集合的特點:添加元素是無序、不可重復、無索引

注意這倆個特別:

  • LinkedHashSet:有序、不重復、無索引
  • TreeSet:按照大小默認升序排序、不重復、無索引

然后我們來試一試HashSet集合

        HashSet<String> set = new HashSet<>();set.add("java1");set.add("java2");set.add("java1");set.add("java2");System.out.println(set);

image-20240526090530065

HashSet底層原理

基于哈希表實現

特點:增刪改查都較好

1.8之前

JDK8之前哈希表:數組+鏈表

  1. 創建一個默認為16的數組 默認加載因子為0.75表名為table

    image-20240526103135020

  2. 使用元素的哈希值數組長度求余計算出應存入的位置(這里的求余是它獨有的算法,并不是我們直接的%求余,確保它為正數)

  3. 判斷當前位置是否為null,如果是null直接存入

    image-20240526103332391

  4. 如果不為null,如果有元素,則調用equals方法比較(相等,則不存;不相等,則存入數組)

    1. JDK8之前,新元素會存入數組,占用老元素位置,老元素掛在下面

    image-20240526103610692

1.8之后

JDK8之后哈希表:數組+鏈表+紅黑樹

當鏈表長度超過8,且數組長度>=64時,自動將鏈表轉為紅黑樹

image-20240526104109437

image-20240526104119591

LinkedHashSet底層原理

基于哈希表來實現

但是,每個元素都多了一個雙鏈表機制來記錄前后元素的位置

image-20240528101238298

TreeSet底層原理

特點:可排序(默認升序,按照元素大小,由小到大)

底層基于紅黑樹實現

總結

image-20240528102747856

集合并發修改異常錯誤

使用迭代器遍歷集合時,又同時在刪除集合中的數據,程序就會出現并發修改異常的錯誤。

底層原因是因為集合刪除后會改變原集合的大小,而指針會自動往后移造成數據的漏刪

例如

//刪除名中有李字的
["張三","李四","五李","王五"]i
//第一次["張三","李四","五李","王五"]i
//刪除 后指針指向五李
["張三","五李","王五"]   i//繼續
["張三","五李","王五"]   i

上面這種情況就會造成異常錯誤

解決方法呢,就是在每次刪除之后將i向前移,迭代器底層也是這樣實現的

Map雙列集合

每次存儲需要一對數據作為一個元素

Map中的鍵是不允許重復的,但是值可以

HashMap底層原理

特點:無序、不重復、無索引

底層:基于哈希表實現

實際上:原來所有的Set系列的集合都是基于Map實現的,只是Set集合中的元素只要鍵數據,不要值數據

image-20240528165828230

image-20240528165858677

注意的是底層這里計算hash值是基于鍵來進行hash表計算

image-20240528170054305

LinkedHashMap底層原理

特點:有序、不重復、無索引

底層:基于哈希表實現,但是多了一個雙鏈表機制來記錄元素順序(保證有序)

實際上:原來學習的LinkedHashSet集合的底層原理就是LinkedHashMap。

image-20240528170423776

image-20240528170511992

TreeMap底層原理

特點:不重復、無索引、可排序(按照鍵的大小默認升序排序,只能對鍵排序)

原理:跟TreeSet一樣基于紅黑樹實現排序

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

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

相關文章

Spring OAuth2:開發者的安全盾牌!(上)

何利用Spring OAuth2構建堅不可摧的安全體系&#xff1f;如何使用 OAuth2 從跨域挑戰到性能優化&#xff0c;每一個環節都為你的應用保駕護航&#xff1f; 文章目錄 Spring OAuth2 詳解1. 引言簡述OAuth2協議的重要性Spring Framework對OAuth2的支持概述 2. 背景介紹2.1 OAuth2…

比較Rust和Haskel

在比較Rust和Haskell時&#xff0c;我們可以從多個維度來分析它們各自的優勢。以下是Rust相對于Haskell的優勢&#xff0c;以及Haskell相對于Rust的優勢&#xff1a; Rust比Haskell強的方面&#xff1a; 內存安全與并發性&#xff1a; Rust通過獨特的所有權系統和借用檢查器在…

智能倉儲物流系統(WMS)系列-管理查詢調整

好的應用系統應是細分簡單&#xff0c;界面簡潔易操作&#xff0c;程序代碼簡潔易懂的。

史上最全排序算法整理(2)

本篇文章我們將接著上篇繼續介紹常見的排序算法&#xff0c;有需要的小伙伴可以移步史上最全排序算法整理&#xff08;1&#xff09;查看相關內容哦 1.冒泡排序 1.1基本思想 在待排序的一組數中&#xff0c;將相鄰的兩個數進行比較&#xff0c;若前面的數比后面的數大就交換兩…

【解決npm install -g windows-build-tools的安裝問題】

解決npm install -g windows-build-tools的安裝問題 https://developer.huawei.com/consumer/cn/forum/topic/0203740461436730610?fid26

gitlab 創建 ssh 和 token

文章目錄 一、創建ssh key二、將密鑰內容復制到gitlab三、創建token 一、創建ssh key 打開控制臺cmd&#xff0c;執行命令 ssh-keygen -t rsa -C xxxxx xxxxx是你自己的郵箱 C:\Users\xx\.ssh 目錄下會創建一個名為id_rsa.pub的文件&#xff0c;用記事本打開&#xff0c;并…

基于深度學習的中文情感分析系統python flask

基于python的畢業設計 基于深度學習的中文情感分析系統(flask)(源碼說明文檔演示) 畢業設計課程設計期末大作業、課程設計、高分必看&#xff0c;下載下來&#xff0c;簡單部署&#xff0c;就可以使用。 包含&#xff1a;項目源碼、數據庫腳本、軟件工具等&#xff0c;該項目…

【Spring Cloud】微服務工程中的服務注冊與發現配置中心-Consul

Catalog Spring Cloud Consul一、需求二、是什么三、優點四、缺點五、怎么用六、細節 Spring Cloud Consul 一、需求 多個微服務之間通過RestTemplate中的api相互調用&#xff0c;一般要寫死微服務的IP地址和端口號&#xff0c;相當于硬編碼&#xff0c;非常不靈活&#xff0…

MyBatis出現:SQLSyntaxErrorException: Unknown column ‘XXX‘ in ‘field list‘

<update id"updateStudent">update tb_students set stu_name${stuName},stu_gender${stuGender},stu_age${stuAge},stu_tel${stuTel}where stu_num ${stuNum}</update> 本質上來說&#xff0c;是Mybatis使用上的錯誤&#xff0c;不熟悉&#xff0c;理…

C#知識|通過ADO.NET實現應用程序對數據庫的增、刪、改操作。

哈嘍,你好啊,我是雷工! 前邊學習了SQLServer數據庫相關的增刪改查的基本操作, 上節練習了C#通過ADO.NET技術和SQLServer數據庫建立連接和斷開連接的寫法, 本節繼續學習ADO.NET的相關操作,下面為向數據庫中插入數據的相關練習筆記。 01 向數據庫插入數據 插入數據的過程…

SQL函數--union all 使用方法及案例

1. 使用方法 在 SQL 中&#xff0c;UNION ALL 操作用于結合兩個或更多 SELECT 語句的結果集&#xff0c;包括所有匹配的行&#xff0c;甚至包括重復的行。這與 UNION 不同&#xff0c;因為 UNION 會自動刪除重復的行。 滿足條件&#xff1a; 1、兩個select查詢的列的數量必須相…

web前端柜架圖片:探索與解析

web前端柜架圖片&#xff1a;探索與解析 在web前端開發的世界里&#xff0c;圖片的處理與展示是一項至關重要的任務。而“web前端柜架圖片”這一概念&#xff0c;可能初聽起來讓人有些困惑&#xff0c;它究竟指的是什么&#xff1f;在本文中&#xff0c;我們將從四個方面、五個…

Ai速遞5.29

全球AI新聞速遞 1.摩爾線程與無問芯穹合作&#xff0c;實現國產 GPU 端到端 AI 大模型實訓。 2.寶馬工廠&#xff1a;機器狗上崗&#xff0c;可“嗅探”故障隱患。 3.ChatGPT&#xff1a;macOS 開始公測。 4.Stability AI&#xff1a;推出Stable Assistant&#xff0c;可用S…

CCF-GESP 等級考試 2023年3月認證C++一級真題

2024年03月真題 一、單選題&#xff08;每題2分&#xff0c;共30分&#xff09; 第 1 題 以下不屬于計算機輸入設備的有&#xff08; &#xff09;。 A. 鍵盤B. 音箱C. 鼠標D. 傳感器 第 2 題 計算機系統中存儲的基本單位用B來表示&#xff0c;它代表的是&#xff08; &#x…

企業網絡的“瑞士軍刀”:探索“一端多能”設備的多面性

在數字化時代&#xff0c;企業網絡需求的復雜性和多樣性不斷增長&#xff0c;傳統的單一功能網絡設備已難以滿足這些需求。企業需要一種集多種功能于一身的“一端多能”網絡設備&#xff0c;以應對各種網絡環境和業務需求&#xff0c;就像是一把多功能、靈活、可靠的瑞士軍刀&a…

一個月速刷leetcodeHOT100 day13 二叉樹結構 以及相關簡單題

樹是一種分層數據的抽象模型 二叉樹 二叉樹中的節點最多只能有兩個子節點&#xff0c;一個是左側子節點&#xff0c;另一個是右側子節點 二叉搜索樹 二叉搜索樹&#xff08;BST&#xff09;是二叉樹的一種&#xff0c;但是只允許你在左側節點存儲&#xff08;比父節點&…

測試基礎07:測試工作流程規范、進度同步與把控

課程大綱 1、迭代測試流程 2、測試流程 2.1、測試用例評審 目的&#xff1a;對齊產品需求理解&#xff0c;完善、優化測試場景。 參與方&#xff1a;項目、產品、開發、測試。 用例內容&#xff1a;冒煙用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒煙測試 提測…

SOLIDWORKS正版價格多少錢

SOLIDWORKS作為目前應用較為廣泛的3D CAD軟件之一&#xff0c;具有強大的功能和實用性&#xff0c;它為各類工程設計提供綜合解決方案。但是&#xff0c;正版SOLIDWORKS價格是個不可忽視的問題。那SOLIDWORKS的正版價格究竟如何呢&#xff1f;又是受什么因素影響&#xff1f; 先…

【論文閱讀|cryoET】ICE-TIDE

簡介 三維cryoET重建的保真度進一步受到采集過程中物理擾動的影響。這些擾動以各種形式表現出來&#xff0c;例如連續采集之間的樣本漂移&#xff0c;導致連續投影未對準&#xff0c;或者由于未散射的電子而導致二維投影中的局部變形。 傳統的冷凍電子斷層掃描工作流程需要對…

單片機編程的code關鍵字的詮釋

在單片機編程中&#xff0c;code 是一個關鍵字&#xff0c;用于指示編譯器將變量存儲在程序存儲器中&#xff0c;而不是在數據存儲器中。通常情況下&#xff0c;程序存儲器的速度比數據存儲器的速度更快&#xff0c;而且程序存儲器的容量較小&#xff0c;適合存儲常量數據和程序…