回爐重造java----單列集合(List,Set)

體系結構:? 集合主要分為兩種,單列集合collection和雙列集合Map,區別在于單列集合一次插入一條數據,而雙列的一次插入類似于key-value的形式

單列集合collection

294a9d0a1bc64a7ea78ef4c9eab9bc64.jpg

注:紅色的表示是接口,藍色的是實現類

7aa0297e45ba47c1bb2d024735e3dead.jpg

①操作功能:

714219247fc94d5abe7479f485de75f4.jpg增加: add(),List的新增一定是成功的,而Set不一定因為其有不能重復的限制條件

清空:clear()

刪除:remove(),因為collection中定義的是共性的方法,所以刪除不能通過索引去刪除

判斷是否存在:contains(),其底層是通過equals()方法實現的,因為equals()方法是基于比較地址值,所以如果集合中存的是對象的話,要重寫equals()方法才能進行contains的比較

判斷是否為空:isEmpty()

返回集合大小:size()

②遍歷方式:

集合的遍歷方式有三種,分別是迭代器遍歷,增強for遍歷和lambda表達式遍歷

迭代器(Iterator)遍歷:創建Iterator對象進行遍歷

5dc442935a4e4233a7cde1b71295cd99.jpg

注:? ?迭代完畢指針不會復位;循環中next()只能用一次;迭代過程中不允許使用集合的方法增加刪除

增強for遍歷:底層其實就是迭代器? ?

b21d3e1c4a9b4367a1d375cb91fc18fa.jpg

注:? ?集合名.for快速生成;對s中的修改不對集合的原數據有影響

Lambda表達式(foreach)遍歷:底層就是遍歷集合通過accept方法依次過的元素

170150d4c6224a02bf46febc5a95b1d8.jpg

③List

db5e5cc96ca6443497d9fc1ce5840778.jpg

?注:? remove的時候如果有方法重載了,優先調用形參和實參類型一樣的方法。remove(1)是索引

遍歷方式:? 相比于collection的3種遍歷方式,List當然全部繼承了,但是因為List有了索引的機制,所以List還增加了兩種,普通的for循環和列表迭代器(listIterator)

cfc1c11724324f28aa473125afaffaeb.jpg

數據結構:

69b0b34aaed6469698d07d84e0a9ee47.jpg

?ArrayList詳解:底層是數組

5a077adb8d5e42728fd64d62e12d44e3.jpg

?源碼:277e9c1091b64dd98b0bc675227e8fd7.jpg

①創建ArrayList時是一個長度為0的elementData

②在插入第一個元素時,將擴容為長度為10的數組,然后把數據放進去

b389b39548a74bbbb9fcf0c8abbf7b83.jpg?①當原數組的長度已經用完了,底層就要去擴容,默認是擴容原數組長度的一半,即1.5倍

②如果插入的數據長度很大,就會擴容到大長度的地方

LinkedList詳解:底層是雙向鏈表

4e2c1c84214344dc87b5a70f3b4b30a0.jpg

?注: 這里的方法基本不用,而是基本使用List的方法

源碼:學了數據結構中的雙向鏈表就可以清楚的知道其操作流程

1c466b51d89940f1a5eaf119981a17a8.png

④Set

泛型:?

c4287671249543ea98a45f15d451104a.png

泛型的作用:?

704064569c2c4f04a83f7593fc0a3dd0.png

?java中的泛型其實是偽泛型:即其實底層存的時候依然是object對象,泛型會擦除

fb88d05e74f34aa08b9db07ac13fc2c8.png

泛型可以定義在類上,也可以定義在方法上,還可以定義在接口上?

HashSet詳解:? 底層是哈希表,jdk8之前是數組+鏈表,jdk8之后是數組+鏈表+紅黑樹

b6a6e82fe31b430c8e826b0a0f5edfd1.jpg

?存數據的過程:①由hashcode計算出應存入的位置②如果位置是空就放進去③如果不為空,則調用equals方法去判斷是否一樣的,如果一樣的就不存④如果不一樣的話,jdk8之前是把新元素放進去,老元素取出來掛在新元素后面,而jdk8之后就是直接把新元素掛在老元素的后面

80567b1f65c2472096030e5f51034e6e.jpg

?注意點:

c09cdad990244610be11fd64d2edcb87.jpg

LinkedHashSet詳解:? 底層跟HashSet一樣,不過在其基礎上加上了數據之間的雙向鏈表結構,使得其變成有序的

7f1f2b86ae10442f8448bb84e6a84e2a.jpg

TreeSet詳解:? 底層是紅黑樹,性能好

e091477e82e14fb4b6d5e1b7c04b70c7.jpg

總結:各種單列集合的應用場景:

66bb62c3eef547d0b62c6aea025f73fd.jpg

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

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

相關文章

SRS流媒體服務器在Linux下的安裝

目錄 一、安裝 1、切換到管理員權限 2、先安裝基礎依賴環境 3、下載SRS源文件

引領AI數據標注新紀元:景聯文科技為智能未來筑基

在人工智能蓬勃發展的今天,數據如同燃料,驅動著每一次技術飛躍。在這場智能革命的浪潮中,景聯文科技憑借其深厚的專業實力與前瞻性的戰略眼光,正站在行業前沿,為全球的人工智能企業提供堅實的數據支撐。 全國布局&…

智能座艙語音助手產品方案

一、用戶調研與痛點分析 1.目標用戶分析 用戶畫像 性別女性年齡50地域2-3線城市職業退休或退居二線教育中專、 大專、 本科財務家庭財務管理者愛好享受生活、 照顧家庭標簽有閑有小錢二、產品定位與賣點提煉 購車目的 愉悅自我, 專屬于自己的座駕: 家…

bitmap requires a valid src attribute

關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 ,擅長java后端、移動開發、商業變現、人工智能等,希望大家多多支持。 未經允許不得轉載 目錄 一、導讀二、概覽三、問題記錄四、 推…

ncnn 算子操作描述

ncnn 算子操作描述,具體查詢見 ncnn/docs/developer-guide/operators.md at master Tencent/ncnn GitHub 都是從上述地方copy過來的,做備份。 具體如下:(針對有些算子 用pytorch 實現了用例,可以對比學習&#xf…

Java學習筆記網站技術博客匯總

江南一點雨網站 https://www.javaboy.org/ 個人博客 https://yanbingzn.github.io/ CS-Notes 面試筆記 https://www.cyc2018.xyz/ JavaGuide(Java學習&面試指南) https://javaguide.cn/home.html SpringMVC 教程 https://springmvc.javaboy…

C++運算符重載(操作符重載)

運算符重載 1. 運算符重載基礎1.1 運算符重載語法1.2 運算符重載細節補充1.3 更多的運算符重載 2. 重載單目運算符3. 如何直接輸入輸出對象類型——重載運算符 << 和 >>3.1 單個對象實現 cou <<3.2 多個對象實現 cout<<3.3 右移運算符 輸入 cin >&g…

Excel-VBA報錯01-解決方法

【已刪除的部件:部件/xl/vbaProject.bin。(Visual Basic for Applications(VBA))】 1.問題復現&#xff1a; Win10 &#xff1b;64位 &#xff1b;Office Excel 2016 打開帶有宏的Excel文件&#xff0c;報錯&#xff1a;【已刪除的部件&#xff1a;部件/xl/vbaProject.bin。…

KBU1010-ASEMI新能源專用KBU1010

編輯&#xff1a;ll KBU1010-ASEMI新能源專用KBU1010 型號&#xff1a;KBU1010 品牌&#xff1a;ASEMI 封裝&#xff1a;KBU-4 最大重復峰值反向電壓&#xff1a;1000V 最大正向平均整流電流(Vdss)&#xff1a;10A 功率(Pd)&#xff1a;中小功率 芯片個數&#xff1a;4…

pandas數據清洗和統計實例

步驟&#xff1a; 統計每一個列的標簽個數去除或者填充某一列NaN值遍歷某一列分組統計在DataFrame中插入行在DataFrame中追加行 pandas讀取Json數據或csv數據 以一個json數據為例&#xff0c;只要json每一個object都一致就可以&#xff1a; # 讀取json或csv df_f pd.read_…

抖店選品都怎么選品?什么樣的產品更吸引人,更具有購買力?

大家好&#xff0c;我是電商花花。 抖店選品一直都是我們無貨源商家的核心問題&#xff0c;不管是出單、還是爆單&#xff0c;店鋪想要有銷量的前提下都是選品。 很多人一上來就是就是選品&#xff0c;沒有選品經驗還瞎選品&#xff0c;結果到最后選了一堆出單的產品&#xf…

回聲消除原理

回聲消除原理 回聲消除是一種音頻處理技術&#xff0c;用于消除聲學空間中發生的回聲。其基本原理如下&#xff1a; 1. 遠端信號估計 捕獲遠端揚聲器發出的信號&#xff08;通常通過麥克風&#xff09;。使用自適應濾波器估計遠端信號&#xff0c;即回聲信號。 2. 回聲信號…

用wordpress建外貿獨立站的是主流的外貿建站方式

WordPress因其易用性、靈活性和強大的功能支持&#xff0c;成為了外貿企業首選的網站建設平臺。 從技術和功能角度來看&#xff0c;WordPress提供了豐富的主題和插件&#xff0c;這些都是構建專業外貿網站所必需的。例如&#xff0c;有專門為外貿網站設計的主題和插件&#xf…

【棧】Leetcode 驗證棧序列

題目講解 946. 驗證棧序列 算法講解 在這里就只需要模擬一下這個棧的出棧順序即可&#xff1a;使用一個stack&#xff0c;每次讓pushed里面的元素入棧&#xff0c;如果當前棧頂的元素等于poped容器中的當前元素&#xff0c;因此就需要讓棧頂元素出棧&#xff0c;poped的遍歷…

一篇文章幫你搞定微軟云計算證書Renew

IT證書都有過期的時間&#xff0c;像AWS是3年有效期&#xff0c;谷歌是2年&#xff0c;微軟是1年&#xff0c;那這些證書到期該怎么Renew更新呢&#xff1f; 小李哥最近的微軟AZ-204證書要到期了&#xff0c;到期前半年就會收到Microsoft發來提醒郵件。大家在這半年內任何時間都…

500行代碼實現貪吃蛇(2)

文章目錄 3. 貪吃蛇的具體實現 3. 貪吃蛇的具體實現 首先&#xff0c;我們要讓整個程序適應本地化 int main() {//修改適配本地中文環境setlocale(LC_ALL, "");return 0; }蛇身節點的創建 //蛇身結點的定義 typedef struct SnakeNode {int x; int y;struct SnakeN…

Unity 性能優化之LOD技術(十)

提示&#xff1a;僅供參考&#xff0c;有誤之處&#xff0c;麻煩大佬指出&#xff0c;不勝感激&#xff01; 文章目錄 LOD技術效果一、LOD技術是什么&#xff1f;二、LODGroup組件介紹三、LODGroup組件使用步驟添加組件添加模型 四、Project Settings中與LOD組件相關參數總結 L…

【DevOps】Linux 內核網絡子系統全面指南與性能調優

目錄 一、Linux 內核網絡子系統 1. Netfilter 主要特性 工作流程 2. Traffic Control (TC) 主要特性 工作流程 3. Socket 主要特性 工作流程 二、內核參數優化 1. net.ipv4.tcp_window_scaling 2. net.core.netdev_max_backlog 3. net.ipv4.tcp_rmem 和 net.ipv4…

第33次CSP認證Q1:詞頻統計

&#x1f344;題目描述 在學習了文本處理后&#xff0c;小 P 對英語書中的 &#x1d45b;n 篇文章進行了初步整理。 具體來說&#xff0c;小 P 將所有的英文單詞都轉化為了整數編號。假設這 &#x1d45b;n 篇文章中共出現了 &#x1d45a;m 個不同的單詞&#xff0c;則把它們…

網絡編程套接字 (二)---udosocket

本專欄內容為&#xff1a;Linux學習專欄&#xff0c;分為系統和網絡兩部分。 通過本專欄的深入學習&#xff0c;你可以了解并掌握Linux。 &#x1f493;博主csdn個人主頁&#xff1a;小小unicorn ?專欄分類&#xff1a;網絡 &#x1f69a;代碼倉庫&#xff1a;小小unicorn的代…