Java集合簡單理解

Java 的集合框架(Java Collections Framework, JCF)是 Java 中用于存儲和操作數據結構的核心庫,提供了豐富的接口和實現類,用于處理不同類型的集合數據。以下是詳細的介紹:


一、集合框架的體系結構

Java 集合主要分為兩大接口:

  1. Collection 接口:存儲單一元素。
    • 子接口:List(有序可重復)、Set(無序不可重復)、Queue(隊列)。
  2. Map 接口:存儲鍵值對(Key-Value)。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L6KW4Q8y-1742140403056)(https://i.imgur.com/3V7gXQ6.png)]


二、Collection 接口及實現類

1. List(有序、可重復)
  • 特點:元素按插入順序存儲,允許重復。
  • 常用實現類
    • ArrayList
      • 基于動態數組實現,支持快速隨機訪問(通過索引)。
      • 初始容量為 10,擴容時增長 50%(newCapacity = oldCapacity + oldCapacity >> 1)。
      • 線程不安全,適用于讀多寫少的場景。
    • LinkedList
      • 基于雙向鏈表實現,插入和刪除效率高(時間復雜度 O(1))。
      • 支持隊列(Queue)和雙端隊列(Deque)操作。
    • Vector(已過時):
      • 線程安全的動態數組,所有方法用 synchronized 修飾,性能較差。
      • 替代方案:使用 Collections.synchronizedList(new ArrayList<>())CopyOnWriteArrayList(并發場景)。
2. Set(無序、不可重復)
  • 特點:元素唯一,不保證順序。
  • 常用實現類
    • HashSet
      • 基于 HashMap 實現,元素存儲在鍵的位置(值用 PRESENT 對象占位)。
      • 依賴 hashCode()equals() 保證唯一性。
      • 時間復雜度:添加、刪除、查詢均為 O(1)。
    • LinkedHashSet
      • 繼承 HashSet,內部通過鏈表維護插入順序。
      • 適合需要按插入順序遍歷的場景。
    • TreeSet
      • 基于紅黑樹(TreeMap)實現,元素按自然順序或自定義 Comparator 排序。
      • 時間復雜度:添加、刪除、查詢均為 O(log n)。
3. Queue(隊列)
  • 特點:先進先出(FIFO)或優先級的元素處理。
  • 常用實現類
    • LinkedList:可作為普通隊列使用。
    • PriorityQueue
      • 基于堆結構實現,元素按優先級排序。
      • 自然順序或通過 Comparator 定義順序。
    • ArrayDeque
      • 基于循環數組實現的雙端隊列,適合高效的頭尾操作。

三、Map 接口及實現類

  • 特點:鍵值對存儲,鍵唯一。
  • 常用實現類
    • HashMap
      • 基于數組+鏈表/紅黑樹(Java 8+),鍵的哈希值決定存儲位置。
      • 允許 null 鍵和 null 值,線程不安全。
      • 擴容機制:默認容量 16,負載因子 0.75(容量達到閾值時擴容為 2 倍)。
    • LinkedHashMap
      • 繼承 HashMap,通過鏈表維護插入順序或訪問順序(LRU 緩存)。
    • TreeMap
      • 基于紅黑樹實現,鍵按自然順序或自定義 Comparator 排序。
    • Hashtable(已過時):
      • 線程安全的哈希表,被 ConcurrentHashMap 取代。
    • ConcurrentHashMap
      • 分段鎖(Java 7)或 CAS + synchronized(Java 8+)實現高并發。
      • 推薦替代 Hashtable 用于多線程場景。

四、工具類 Collections

提供對集合的常用操作:

  • 排序:Collections.sort(list)
  • 線程安全包裝:Collections.synchronizedList(list)
  • 不可變集合:Collections.unmodifiableList(list)
  • 查找極值:Collections.max(collection)

五、迭代器 Iterator

  • 作用:遍歷集合元素。
  • fail-fast 機制
    • 在遍歷過程中檢測到集合被修改(如 add/remove),立即拋出 ConcurrentModificationException
    • 適用于 ArrayListHashMap 等非線程安全集合。
  • fail-safe 機制
    • 遍歷時對原集合的修改不影響迭代器(如 ConcurrentHashMap 的迭代器)。

六、Java 8+ 新特性

  1. Lambda 表達式與集合
    list.forEach(element -> System.out.println(element));
    
  2. Stream API
    list.stream().filter(e -> e > 5).map(e -> e * 2).collect(Collectors.toList());
    
  3. HashMap 優化
    • 當鏈表長度 ≥ 8 時轉換為紅黑樹,提高查詢效率。

七、如何選擇集合類?

  • 需要唯一性SetHashSetTreeSet)。
  • 需要有序性ListArrayListLinkedList)。
  • 鍵值對存儲MapHashMapConcurrentHashMap)。
  • 多線程環境ConcurrentHashMapCopyOnWriteArrayList
  • 排序需求TreeSetTreeMap

八、示例代碼

// List 示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");// Set 示例
Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(2);// Map 示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 10);
hashMap.put("Banana", 20);// 使用 Stream 過濾
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

通過理解集合框架的結構和特性,可以更高效地選擇適合業務場景的數據結構。

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

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

相關文章

群體智能優化算法-旗魚優化算法 (Sailfish Optimizer, SFO,含Matlab源代碼)

摘要 旗魚優化算法&#xff08;Sailfish Optimizer, SFO&#xff09;是一種模擬旗魚&#xff08;Sailfish&#xff09;和沙丁魚&#xff08;Sardine&#xff09;之間捕食關系的新型元啟發式算法。通過在搜索過程中模擬旗魚對沙丁魚的捕食行為&#xff0c;以及沙丁魚群的逃逸與…

【C語言】編譯和鏈接詳解

hi&#xff0c;各位&#xff0c;讓我們開啟今日份博客~ 小編個人主頁點這里~ 目錄 一、翻譯環境和運行環境1、翻譯環境1.1預處理&#xff08;預編譯&#xff09;1.2編譯1.2.1詞法分析1.2.2語法分析1.2.3語義分析 1.3匯編1.4鏈接 2.運行環境 一、翻譯環境和運行環境 在ANSI C…

VIC模型率定驗證

在氣候變化問題日益嚴重的今天&#xff0c;水文模型在防洪規劃&#xff0c;未來預測等方面發揮著不可替代的重要作用。目前&#xff0c;無論是工程實踐或是科學研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。雖然&#xff0c;這些軟件有各自的優點&#xff1b;但是&am…

【AWS入門】AWS云計算簡介

【AWS入門】AWS云計算簡介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云計算&#xff1f;云計算能干什么&#xff1f;我們如何利用云計算&#xff1f;云計算如何實現&#xff1f; 帶著一系列問題&#xff0c;我將做一個普通布道者&#xff0c;引領廣…

Flutter_學習記錄_ ImagePicker拍照、錄制視頻、相冊選擇照片和視頻、上傳文件

插件地址&#xff1a;https://pub.dev/packages/image_picker 添加插件 添加配置 android無需配置開箱即用&#xff0c;ios還需要配置info.plist <key>NSPhotoLibraryUsageDescription</key> <string>應用需要訪問相冊讀取文件</string> <key>N…

藍橋與力扣刷題(藍橋 星期計算)

題目&#xff1a;已知今天是星期六&#xff0c;請問 20^22 天后是星期幾? 注意用數字 1 到 7 表示星期一到星期日。 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 解題思路&#xff0b;代碼&#xff1a; 代碼&#xff1…

向量數據庫原理及選型

向量數據庫 什么是向量什么是向量數據庫原理應用場景 向量數據庫的選型主流向量數據庫介紹向量數據庫對比主流向量數據庫對比表 選型建議 什么是向量 向量是一組有序的數值&#xff0c;表示在多維空間中的位置或方向。向量通常用一個列或行的數字集合來表示&#xff0c;這些數…

以實現生產制造、科技研發、人居生活等一種或多種復合功能的智慧油站開源了

AI視頻監控平臺簡介 AI視頻監控平臺是一款功能強大且簡單易用的實時算法視頻監控系統。它的愿景是最底層打通各大芯片廠商相互間的壁壘&#xff0c;省去繁瑣重復的適配流程&#xff0c;實現芯片、算法、應用的全流程組合&#xff0c;從而大大減少企業級應用約95%的開發成本。用…

小程序網絡大文件緩存方案

分享一個小程序網絡大圖加載慢的解決方案 用到的相關api getSavedFileList 獲取已保存的文件列表&#xff1b;getStorageSync 獲取本地緩存&#xff1b;downloadFile 下載網絡圖片&#xff1b;saveFile 保存文件到本地&#xff1b;setStorage 將數據儲存到小程序本地緩存&…

軟考系統架構師 — 3 操作系統

目錄 3.1 考點分析 3.1 操作系統概述 3.1.1 操作系統的功能 3.1.2 操作系統的分類 3.1.3 嵌入式操作系統主要特點 3.2 進程 3.2.1 進程的組成和狀態 3.2.2 前趨圖與進程資源圖&#xff08;重點&#xff09; 3.2.3 進程同步與互斥 3.2.4 進程調度 3.2.5 死鎖 3.3 線…

PE,ELF,COFF

本文來自 (1)騰訊元寶 (2)程序員的自我修養 PE&#xff08;Portable Executable&#xff09;是一種文件格式&#xff0c;主要用于Windows操作系統中的可執行文件&#xff08;如.exe、.dll、.sys等&#xff09;。PE格式是Windows操作系統中標準的可執行文件格式&#xff0c;由…

MySQL 在 CentOS 7 上安裝的步驟指南

目錄 1. 卸載不需要的環境 2. 獲取 MySQL YUM 倉庫 3. 安裝 MySQL 4. 啟動 MySQL 服務 5. 獲取臨時 Root 密碼 6. 登錄 MySQL 7. 更改 Root 密碼 8. 設置 MySQL 開機自啟動 9. 配置 MySQL 編碼 10. 重啟 MySQL 配置生效 11. 常見問題解決 1. 卸載不需要的環境 如果…

C++初階——類和對象(三) 構造函數、析構函數

C初階——類和對象&#xff08;三&#xff09; 上期內容&#xff0c;我們圍繞類對象模型的大小計算&#xff0c;成員存儲方式&#xff0c;this指針&#xff0c;以及C實現棧和C語言的比較&#xff0c;進一步認識了C的封裝特性。本期內容&#xff0c;我們開始介紹類的默認成員函…

【NLP】 5. Word Analogy Task(詞類比任務)與 Intrinsic Metric(內在度量)

Word Analogy Task&#xff08;詞類比任務&#xff09; 定義&#xff1a;Word Analogy Task 是用于評估詞向量質量的內在指標&#xff08;Intrinsic Metric&#xff09;。該任務基于這樣的假設&#xff1a;如果詞向量能夠捕捉單詞之間的語義關系&#xff0c;那么這些關系應該能…

矩陣冪(矩陣k次冪)

矩陣冪 #include<stdio.h> //矩陣乘法 void cf(int a[20][20],int b[20][20],int result[20][20],int n){for(int i0;i<n;i){for(int j0;j<n;j){result[i][j]0;for(int k0;k<n;k){result[i][j]a[i][k]*b[k][j];}}} }void print(int a[20][20],int n){for(int…

信火一體作戰模式運用特點分析及對一體化防空反導能力建設的啟示

文章目錄 內容摘要1. 引言2. 信火一體作戰模式在現代戰爭中的新內涵和特征2.1 充當火力和信息要素的作戰單元種類更加豐富2.2 信息利用更加凸顯異構平臺間的數據共享和情報融合2.3 作戰環節上更加強調指揮決策的敏捷性和智能化3. 增強防空反導能力的舉措建議3.1 強化各類作戰單…

樣本是怎么估計總體的

樣本是怎么估計總體的 flyfish 1. 什么是樣本估計總體&#xff1f; 樣本估計總體是指通過樣本數據&#xff08;例如100人的身高&#xff09;推斷總體參數&#xff08;例如全國人口的平均身高&#xff09;。核心方法包括&#xff1a; 點估計&#xff1a;用樣本統計量直接估計…

自己動手打造AI Agent:基于DeepSeek-R1+websearch從零構建自己的Manus深度探索智能體AI-Research

第一章&#xff1a;AI Agent基礎與DeepSeek-R1架構解析&#xff08;1/10&#xff09; 1.1 AI Agent技術演進與核心價值 人工智能代理&#xff08;AI Agent&#xff09;經歷了從規則驅動到數據驅動的范式轉移。早期基于專家系統的符號主義方法&#xff08;如MYCIN醫療診斷系統…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固定表頭表格

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固…