【自用】JavaSE--集合框架(一)--Collection集合體系

概述

之前學的ArrayList就是集合的一種,是一種容器,可以往里面存東西,大小可變

Collection集合體系

Collection的常用方法

以后Collection體系的集合都可以用下圖的方法

注意

toArray方法的數組類型是Object,這樣就可以接收任意類型的數據到數組中去,如果需要指定數組類型,方法如下圖

補充

addAll( ) 方法,可以將一個集合中的數據拷貝一份到另一個集合中去,示例如下圖

?輸出結果===>? ? ?

Collection的遍歷方式

之后所有的Collection體系集合都能使用這些方法,而之前用的for方法本質是利用 i 充當索引進行遍歷的,而Set系列集合是沒有索引的,只能在List系列集合中使用

迭代器

(是不是有點像鏈表的遍歷🤔,不準確理解方式:next指向當前所在元素,獲取后就指向下一個元素,使用hasnext判斷指向元素是否為空)

示例:

增強for循環

示例:ele可以取任何名字,把ele理解成當前指向的元素,他會遍歷完所有的元素

Lambda表達式

Java提供一個foreach方法用于遍歷,可以采用lambda表達式簡化,目前還看不出其強大的簡化能力,當后面學到對map集合遍歷時,才能感受到他的強大之處

List集合

未來創建ArrayList或LinkList推薦采用多態的寫法:List<類型> 類名 = new ArrayList<>( );???List<類型> 類名 = new LinkedList<>( );

ArrrayList與LinkedList的底層實現不同,采用的數據結構不一樣,適用場景不同

List特有方法

List遍歷方式

有索引,因此是支持普通的for循環的

ArrayList

底層原理

應用場景

ArrayList? 適用于根據索引查數據、或數據量不大時;不適用于數據量大且需要頻繁進行增刪操作的場景

LinkedList

底層原理

應用場景

Set集合

HashSet用的比較多

前置知識-哈希值

每個對象都有一個哈希值,可以通過哈希值找到對象,若出現相同的哈希值-->碰撞(類比數據結構中的哈希查找)

哈希碰撞:

String類的hashCode()方法把字符值代入特定公式計算哈希值,知道公式就能輕易設計出哈希碰撞

上圖的例子是故意設計的,是為了演示哈希碰撞,實際中并不會這么容易就撞

HashSet

無序、不重復、無索引

jdk8之前:采用的是哈希表,因此增刪改查效率都不錯

補充知識

  1. 數組長度 × 加載因子 = 需要擴容的大小。比如上圖,16×0.75=12,當數組中占了12個位置的時候,就會進行擴容,增加數組長度至原來長度的兩倍
  2. 從jdk8開始,當鏈表的長度>8,且數組長度>=64,自動將鏈表轉換成紅黑樹(具體紅黑樹細節看408筆記)

去重機制

HashSet默認不能對內容一樣的兩個不同對象進行去重!因為雖然內容一樣,但是地址是不同的,因此HashSet會認為兩個對象并不是重復的

解決辦法:在對象的類中重寫 equals方法 與 HashCode方法 即可,直接右鍵generate可以生成,具體如下,簡單的理解 ---> 重寫后的equals方法:若對象相同會返回true,而重寫后的hashcode方法:若兩個對象的內容一樣就返回相同的哈希值

LinkedHashSet

有序、不重復、無索引

如何實現有序?雙鏈表實現,但也因此增加了內存

TreeSet

不重復、無索引、可排序

自定義排序規則

由于無法進行排序,因此需要自己指定排序規則,如下圖,之前在學習Arrays.sort時學過,這里方法一樣

補充:

  1. 如果兩種方法都是用了,TreeSet會采用就近原則使用外部重寫的Comparator規則,而不使用對象類內部重新的
  2. 如果兩個對象中出現的某一項相同,比如采用年齡排序,年齡都是16,則會丟失其中一個,因為Set的規則就是出現輸入相同的數據時會保留先前輸入的
Comparable

讓需要排序的對象類實現Comparable泛型接口,重寫comparetor,自己指定規則,就能對對象進行排序了,示例如下:

Comparator

Comparator是一個匿名內部類,在傳入參數時直接重寫,可以利用TreeSet的有參構造器直接設置Comparator對象

示例如下,其中調用的 Double.compare(double a,double b)?方法:a>b return 1 ; a<b return -1; a==b return0

各種集合的使用總結

注意事項

集合的并發修改異常問題

下面這段代碼就會發生并發修改異常問題,主要問題在于remove,remove后集合整體是會往前移一個的,因此當找到含李的名字的時候,remove后集合會整體往前移,此時hasNext會讓指針指向下一個,導致漏檢

解決辦法

若采用迭代器遍歷,不要直接使用? 集合.remove,而是采用? 迭代器.remove,就可以解決該問題

注意:若使用增強for循環或是lambda表達式進行循環出現并發修改異常問題,是沒有辦法解決的

其他相關知識

可變參數

示例:

Collections

addAll 示例:

shuffle 示例:

sort

默認升序排序,如果里面存的是對象,就需要像上面一樣使用 comparable 或者 comparator 設置比較規則進行排序

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

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

相關文章

電腦視頻常用幾種接口

傳輸信號類型 DP&#xff08;DisplayPort&#xff09;主要用于傳輸數字視頻和音頻信號&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同樣傳輸數字音視頻信號&#xff0c;但更偏向消費電子領域&#xff0c;如電視、游…

CherryStudio+playwright-mcp-server實現AI自動化

目錄 1、CherryStudio安裝與配置 1.1什么是CherryStudio 1.2安裝 1.3配置 2、playwright-mcp-server的安裝與配置 3、執行測試與結果 1、CherryStudio安裝與配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型對話、知識庫管理、AI 繪畫、翻譯等功能于一體的全能 …

深入了解 find_element 方法:Web 自動化定位元素的核心?

在 Web 自動化測試領域&#xff0c;元素定位是實現各類操作的基礎&#xff0c;而find_element方法正是 Selenium 等自動化工具中用于定位單個元素的核心方法。掌握它的使用技巧&#xff0c;能讓我們更精準、高效地操控網頁元素&#xff0c;為自動化測試腳本的編寫打下堅實基礎。…

從零開始的云計算生活——第三十三天,關山阻隔,ELK日志分析

目錄 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架構 b. 高性能原理 c. 數據模型創新 3、核心技術組件 4、核心應用場景 a. 企業級搜索 b. 可觀測性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演進關鍵特性 6、核心優勢…

深入理解 Spring Boot Starter 的生成機制

在使用 Spring Boot 進行開發時&#xff0c;我們常常會引入諸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依賴&#xff0c;從而快速開啟相關功能模塊。但你是否思考過這些 Starter 是如何構建的&#xff1f;如果我們要開發自己的 Starter&#xff0c;又該如何…

阿里云-通義靈碼:隱私保護機制—為數據安全筑起銅墻鐵壁

免責聲明&#xff1a;此篇文章所有內容皆是本人實驗&#xff0c;并非廣告推廣&#xff0c;并非抄襲&#xff0c;該系列繼續~每日一句不要感嘆自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相與無邊的黑暗已是耀眼。一.引言在這個數據如同空氣般滲透到生活每個角落的時代…

最小生成樹算法詳解

最小生成樹算法詳解一、最小生成樹基礎概念1.1 生成樹與最小生成樹1.2 核心性質1.3 應用場景二、Prim 算法&#xff1a;從頂點出發的“生長式”構建2.1 算法原理2.2 Java 代碼實現&#xff08;鄰接矩陣版&#xff09;2.3 復雜度分析三、Kruskal 算法&#xff1a;按邊權排序的“…

YOLO 目標檢測的改進方法

YOLO目標檢測的改進方法可以從模型架構、訓練策略、損失函數等多個方面入手&#xff0c;以下是一些常見的改進方法方向及參考文獻&#xff1a; 模型架構改進 骨干網絡替換&#xff1a;使用更輕量或更強大的網絡替換原始骨干網絡。輕量級網絡如MobileNetV3、ShuffleNetV2等適合…

C++ 程序 AddressSanitizer:DEADLYSIGNAL

GCC && G 操作系統&#xff1a;Ubuntu 22.04 現象&#xff1a;C程序編譯時開啟ASAN&#xff0c;運行時有幾率會出現大量AddressSanitizer:DEADLYSIGNAL 參考文章&#xff1a; https://stackoverflow.com/questions/77894856/possible-bug-in-gcc-sanitizers https://st…

【強化學習】實際部署

環境 Gymnasium 作為環境接口&#xff0c; PyBullet作為物理仿真平臺&#xff0c; Stable Baselines3 用于訓練算法。 測試框架搭建 以pybullet自帶的Cart-pole-v1為例 安裝依賴&#xff1a;確保安裝了 Gymnasium 和 SB3 ( pip install gymnasium stable-baselines3 ).初始化環…

集訓Demo4

創建數據庫創建項目基本和視頻中的一樣我給User添加了vip這個屬性&#xff0c;想實現兩個令牌通過訪問的案例&#xff0c;但遇到了問題一個令牌是密碼加用戶名的map數組這是它的獲取、驗證邏輯獲取驗證另一個令牌是Int vip這是自己寫的另一套密鑰和方法獲取但在驗證這里有問題頭…

深度優化:Java 慢查詢排查與性能調優實戰

文章目錄&#x1f680; 深度優化&#xff1a;Java 慢查詢排查與性能調優實戰&#x1f6a8;1. 事故全景&#xff1a;從告警到定位&#x1f575;??♂?1.1 事故時間線&#x1f4ca; 1.2 關鍵指標異常&#x1f6e0;? 1.3 排查工具鏈&#x1f50d; 2. 深度剖析&#xff1a;MySQL…

TF-IDF(Term Frequency - Inverse Document Frequency)

TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09;是一種在信息檢索與文本挖掘中非常常用的關鍵詞提取方法&#xff0c;用于衡量一個詞在文檔集合中的重要性。它的核心思想是&#xff1a;如果一個詞在某個文檔中出現得頻繁&#xff0c;同時在其他文檔…

Chrome緊急更新,谷歌修復正遭活躍利用的關鍵零日漏洞

谷歌已針對桌面版Chrome發布重要穩定渠道更新&#xff08;版本138.0.7204.157/.158&#xff09;&#xff0c;修復了六個安全漏洞&#xff0c;其中包括一個已被實際利用的漏洞。該更新正在向Windows、Mac和Linux平臺推送&#xff0c;預計未來數日或數周內將通過自動更新完成部署…

Typecho插件開發:實現文章字數統計與閱讀時長計算功能

文章目錄 Typecho文章字數統計與閱讀時長計算功能實現指南 1. 功能背景與需求分析 2. 插件設計與實現 2.1 插件基礎結構 2.2 插件主邏輯實現 2.3 代碼解析與優化 3. 前端展示優化 3.1 CSS樣式增強 3.2 多語言支持 4. 高級功能擴展 4.1 數據庫表優化 4.2 定時批量處理歷史文章 5…

開源短鏈接工具 Sink 無需服務器 輕松部署到 Workers / Pages

本文首發于只抄博客,歡迎點擊原文鏈接了解更多內容。 前言 Sink 是一款開源免費的短鏈接生成工具,支持自定義短鏈接 Slug 以及設置到期時間,并且還可以借助 Cloudflare 的 Analytics Engine 功能分析短鏈接的統計數據。 最重要的是實現以上這些功能并不需要有自己的服務器,…

嵌入式數據結構之順序表總結

以下是為嵌入式面試準備的順序表全面優化指南&#xff0c;結合高頻考點、代碼規范與嵌入式專項優化技巧&#xff0c;助你系統掌握該知識點。 一、順序表基礎與嵌入式特點 ?本質? 用連續內存空間存儲線性表元素&#xff0c;通過下標實現O(1)隨機訪問 。 ?嵌入式優勢?&#x…

Pytorch下載Mnist手寫數據識別訓練數據集的代碼詳解

datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransforms.ToTensor())1. datasets.MNIST這是torchvision.datasets模塊中的一個類&#xff0c;專門用于加載MNIST數據集。MNIST是一個著名的手寫數字識別數據集&#xff0c;包含60,000個訓練樣本和10,000個測試…

汽車免拆診斷案例 | 07款豐田Hilux啟動故障

故障現象一輛 2007 年的豐田Hilux 2.5L柴油手動擋&#xff0c;行駛里程為23萬公里。車主說車輛有很多故障&#xff0c;包括故障燈閃爍、發動機啟動后又熄火、短時間運行時發動機還會劇烈抖動異響&#xff0c;從排氣管冒出大量煙霧。故障診斷接車之后進行檢查&#xff0c;發現發…

黃老師(Exeter University)學術交流

1. 文章結構與核心貢獻聚焦 強調明確切入點和核心“亮點”貢獻&#xff0c;避免分散&#xff0c;確保至少一項最主要、富有創新的方法。在該貢獻點上進行全面充分的實驗驗證&#xff0c;包括不同模型尺寸、普適性測試&#xff0c;以應對審稿專家的質疑。建議從讀者或審稿人角度…