15.集合框架的學習

一、簡介

集合框架(Collection Framework) 是 Java 提供的一套用于存儲、操作和處理數據集合的標準化架構。它主要位于
java.util 包中,提供了一組 接口實現類,用于操作不同類型的數據集合,如列表(List)、集合(Set)和映射(Map)等。
Java集合框架位于java.util包中
Collection是Set和List的父類,Collections是工具類,提供了對集合進行排序、遍歷等多種算法的實現。
ArrayList: 有序(放進去順序和拿出來順序一致),可重復
HashSet: 無序(放進去順序和拿出來順序不一定一致),不可重復

1. 集合框架的核心組件

Java 集合框架主要由 接口實現類算法 組成。

(1)核心接口

Java 集合框架中最重要的接口有:
  • Collection 接口(頂級接口,List 和 Set 繼承自它)
    • List(列表):有序,可重復(如 ArrayList、LinkedList)
    • Set(集合):無序,元素唯一(如 HashSet、TreeSet)
    • Queue(隊列):按特定順序處理元素(如 LinkedList、PriorityQueue)
  • Map(映射):鍵值對存儲,不允許鍵重復(如 HashMap、TreeMap)

(2)主要實現類

接口
主要實現類
特點
List
ArrayList
LinkedList
Vector
有序,可重復
Set
HashSet
LinkedHashSet
TreeSet
無序(或排序),不重復
Queue
PriorityQueue
ArrayDeque
先進先出(FIFO)或優先級處理
Map
HashMap
LinkedHashMap
TreeMap
鍵值對存儲,不允許鍵重復
@Test
public void test1() {//數組最大問題是長度固定,而且要操作下標Student[] array = new Student[3];ArrayList<Student> list = new ArrayList<>();Student student1 = new Student();Student student2 = new Student();Student student3 = new Student();Student student4 = new Student();list.add(student1);list.add(student2);list.add(student3);list.add(student4);list.add(student1);//有序可重復//有序:你放進去的順序和拿出來的順序一致//ArrayList<String> list1 = new ArrayList<>();List<String> list1 = new ArrayList<>();list1.add("Java");list1.add("UI");list1.add("H5");list1.add("H5");list1.add("aa");for (String str : list1) {System.out.println(str);}System.out.println("-------------------");//無序不重復//無序:放進去順序和拿出來的順序可能是不一致的//HashSet<String> set = new HashSet<String>();Set<String> set = new HashSet<>();set.add("Java");set.add("UI");set.add("H5");set.add("H5");set.add("aa");for (String str : set) {System.out.println(str);}
}

注意:

jdk1.7版本之前創建集合對象必須把前后的泛型都寫上

ArrayList list = new ArrayList();

jdk1.7版本之后,=號后面的泛型可以省略,后面的泛型可以根據前面的泛型推導出來

ArrayList list = new ArrayList<>();

?

二、ArrayList和LinkedList區別

隊列

?

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();
ArrayList和LinkedList的大致區別如下:
  1. ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。
  2. 對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。
  3. 對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。

?

ArrayList內部是使用可増長數組實現的,所以是用get和set方法是花費常數時間的,但是如果插入元素和刪除元素,

除非插入和刪除的位置都在表末尾,否則代碼開銷會很大,因為里面需要數組的移動。

LinkedList是使用雙鏈表實現的,所以get會非常消耗資源,除非位置離頭部很近。但是插入和刪除元素花費常數時間。

三、隊列

Queue先進先出 FIFO Firt In First Out

客服電話、12306排隊買票、滴滴打車

LinkedList linkedList = new LinkedList();
linkedList.addLast("A");
linkedList.addLast("B");
linkedList.addLast("C");
linkedList.removeFirst();

?

四、Map

1、Map

Map key,value

Set> set = map.entrySet();

map.keySet();

Map接口

1、Collection中的集合,元素是孤立存在的(理解為單身),向集合中存儲元素采用一個個元素的方式存儲。

2、Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。

3、Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。

4、需要注意的是,Map中的集合不能包含重復的鍵,值可以重復;每個鍵只能對應一個值。

5、Map中常用的集合為HashMap集合、LinkedHashMap集合。

Map接口中的常用方法

?

public static void main(String[] args) {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("星期一", "Monday");map.put("星期日", "Sunday");System.out.println(map); // {星期日=Sunday, 星期一=Monday}// 根據指定的key獲取對應的valueString en = map.get("星期日");System.out.println(en); // Sunday// 根據key刪除元素,會返回key對應的value值String value = map.remove("星期日");System.out.println(value); // SundaySystem.out.println(map); // {星期一=Monday}
}

2、Map集合遍歷鍵找值方式:

1、keySet

鍵找值方式:即通過元素中的鍵,獲取鍵所對應的值

1.獲取Map集合中所有的鍵,由于鍵是唯一的,所以返回一個Set集合存儲所有的鍵

2.遍歷鍵的Set集合,得到每一個鍵

3.根據鍵,獲取鍵所對應的值

?

?

public void test1() {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("鄧超", "孫儷");map.put("李晨", "范冰冰");map.put("劉德華", "柳巖");// 獲取Map中的所有keySet<String> keySet = map.keySet();// 遍歷存放所有key的Set集合Iterator<String> it = keySet.iterator();while (it.hasNext()) {// 得到每一個keyString key = it.next();// 通過key獲取對應的valueString value = map.get(key);System.out.println(key + "=" + value);}
}
2、entrySet

Map集合遍歷鍵值對方式

鍵值對方式:即通過集合中每個鍵值對(Entry)對象,獲取鍵值對(Entry)對象中的鍵與值。

操作步驟與圖解:

1.獲取Map集合中,所有的鍵值對(Entry)對象,以Set集合形式返回。

2.遍歷包含鍵值對(Entry)對象的Set集合,得到每一個鍵值對(Entry)對象

3.通過鍵值對(Entry)對象,獲取Entry對象中的鍵與值。

?

?

?注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之后就可以使用了

@Test
public void test1() {Map<String, String> map = new HashMap<>();map.put("cn", "中國");map.put("us", "美國");map.put("uk", "英國");Set<Map.Entry<String, String>> entrySet = map.entrySet();for (Map.Entry<String, String> entry : entrySet) {System.out.println(entry.getKey() + " : " + entry.getValue());}System.out.println("-----------");String country = map.get("cn");System.out.println(country);System.out.println("-----------");Set<String> keySet = map.keySet();for (String key : keySet) {System.out.println(key + " : " + map.get(key));}
}@Test
public void test2() {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("鄧超", "孫儷");map.put("李晨", "范冰冰");map.put("劉德華", "柳巖");// 獲取Map中的所有key與value的對應關系Set<Map.Entry<String, String>> entrySet = map.entrySet();// 遍歷Set集合Iterator<Map.Entry<String, String>> it = entrySet.iterator();while (it.hasNext()) {// 得到每一對對應關系Map.Entry<String, String> entry = it.next();// 通過每一對對應關系獲取對應的keyString key = entry.getKey();// 通過每一對對應關系獲取對應的valueString value = entry.getValue();System.out.println(key + "=" + value);}
}

?

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

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

相關文章

【方案分享】展廳智能講解:基于BLE藍牙Beacon的自動講解觸發技術實現

【方案分享】展廳智能講解&#xff1a;基于BLE藍牙Beacon的自動講解觸發技術實現 讓觀眾靠近展品即可自動彈出講解頁面&#xff0c;是智能展廳的核心功能之一。本文將從軟硬件技術、BLE Beacon原理、微信小程序實現、優劣對比與拓展方案五個維度&#xff0c;系統講解“靠近展臺…

微前端架構:從單體到模塊化的前端新革命

在信息技術&#xff08;IT&#xff09;的迅猛發展中&#xff0c;前端開發領域正迎來一場顛覆性的變革 —— 微前端架構&#xff08;Micro - Frontends&#xff09;。2025 年&#xff0c;隨著 Web 應用的復雜性激增、團隊協作需求的增長以及用戶對無縫體驗的期待&#xff0c;微前…

React中常用的鉤子函數:

一. 基礎鉤子 (1)useState 用于在函數組件中添加局部狀態。useState可以傳遞一個參數&#xff0c;做為狀態的初始值&#xff0c;返回一個數組&#xff0c;數組的第一個元素是返回的狀態變量&#xff0c;第二個是修改狀態變量的函數。 const [state, setState] useState(ini…

如何在 Windows 11 或 10 上通過 PowerShell 安裝 Docker Desktop

了解如何使用 PowerShell 或命令提示符在 Windows 11 或 10 上安裝 Docker CLI 和 Docker Desktop GUI,以創建容器運行虛擬機。無需手動訪問網站下載安裝程序,所有操作都將在命令終端完成。 Docker 是一個強大的容器化平臺,允許開發人員將應用程序及其依賴項打包為輕量級容…

Python實例題:人機對戰初體驗Python基于Pygame實現四子棋游戲

目錄 Python實例題 題目 代碼實現 實現原理 游戲邏輯&#xff1a; AI 算法&#xff1a; 界面渲染&#xff1a; 關鍵代碼解析 游戲棋盤渲染 AI 決策算法 勝利條件檢查 使用說明 安裝依賴&#xff1a; 運行游戲&#xff1a; 游戲操作&#xff1a; 擴展建議 增強…

一文詳解 HLS

1 HLS的簡介 1.1 HLS的背景 從 RTMP&#xff08;Real-Time Messaging Protocol&#xff0c;實時消息傳輸協議&#xff09; 到 HLS&#xff08;HTTP Live Streaming&#xff0c;HTTP直播流&#xff09; 的技術演進&#xff0c;本質上是直播協議從 專有協議 向 通用 Web 協議 的…

go 訪問 sftp 服務 github.com/pkg/sftp 的使用踩坑,連接未關閉(含 sftp 服務測試環境搭建)

前言 最近在使用 sftp 服務時&#xff0c;被告知發起了海量的連接&#xff0c;直接把服務器搞崩&#xff0c;ip 被封了。 這是啥情況&#xff1f; golang 寫的代碼&#xff0c;我就正常的訪問 sftp 服務&#xff0c;連接使用過后也都關閉了&#xff0c;咋會出現連接一直連著…

Android 直接通過 app_process 啟動的應用如何使用 Context

文章目錄 一、問題背景二、代碼實現三、代碼詳解 一、問題背景 在 Android 中&#xff0c;可以使用 Android Studio 編寫 Java 應用程序&#xff0c;通過編譯打包成 apk 文件&#xff0c;然后將文件推送至 /data/local/tmp 等可執行的目錄或安裝打包出來的應用&#xff0c;隨后…

【數據結構與算法】LeetCode 每日三題

如果你已經對數據結構與算法略知一二&#xff0c;現在正在復習數據結構與算法的一些重點知識 ------------------------------------------------------------------------------------------------------------------------- 點贊收藏&#x1f308;&#xff0c;每天更新總結文…

深度“求索”:DeepSeek+Dify構建個人知識庫

目錄 前言 環境部署 安裝Docker 安裝Dify 配置Dify 部署知識庫 創建應用 前言 在當今數字化信息爆炸的時代&#xff0c;數據隱私和個性化知識管理成為企業和個人關注的焦點。Dify&#xff0c;作為一款備受矚目的開源 AI 應用開發平臺&#xff0c;為用戶提供了完整的私有…

【Redis8】最新安裝版與手動運行版

目錄 一、直接運行 1. 下載 Redis百度網盤 2. 解壓后直接運行 redis-server.exe?編輯 二、安裝版運行 雙擊 install_redis_service.bat 輸入安裝路徑&#xff08;請提前創建好安裝路徑&#xff09;后直接回車?編輯 下一步直接回車即可&#xff0c;因為是使用配置模板…

@Column 注解屬性詳解

提示&#xff1a;文章旨在說明 Column 注解屬性如何在日常開發中使用&#xff0c;數據庫類型為 MySql&#xff0c;其他類型數據庫可能存在偏差&#xff0c;需要注意。 文章目錄 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

使用Gemini, LangChain, Gradio打造一個書籍推薦系統 (第二部分)

建立向量嵌入數據庫 from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain.docstore.document import Document from langchain_chroma.vectorstores import Chromaimport vertexai from…

【Go-4】函數

函數 函數是編程中的基本構建塊&#xff0c;用于封裝可重用的代碼邏輯。Go語言中的函數功能強大&#xff0c;支持多種特性&#xff0c;如多返回值、可變參數、匿名函數、閉包以及將函數作為值和類型傳遞。理解和掌握函數的使用對于編寫高效、可維護的Go程序至關重要。本章將詳…

【已解決】HBuilder X編輯器在外接顯示器或者4K顯示器怎么界面變的好小問題

觸發方式&#xff1a;主要涉及DPI縮放問題&#xff0c;可能在電腦息屏有概率觸發 修復方式&#xff1a; 1.先關掉軟件直接更改屏幕縮放&#xff0c;然后打開軟件&#xff0c;再關掉軟件恢復原來的縮放&#xff0c;再打開軟件就好了 2.(不推薦&#xff09;右鍵HBuilder在屬性里…

spark調度系統核心組件SparkContext、DAGSchedul、TaskScheduler、Taskset介紹

目錄 1. SparkContext2.DAGScheduler3. TaskScheduler4. 協作關系5 TaskSet的定義6. 組件關系說明Spark調度系統的核心組件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介紹 1. SparkContext 1、資源申請: SparkContext是Spark應用程序與集群管理器(如St…

VSCode+EIDE通過KeilC51編譯,使VSCode+EIDE“支持”C和ASM混編

在使用Keil C51時&#xff0c;要讓Keil C51支持混編則需要在混編的.c文件上右鍵選擇Options for File *(ALTF7)&#xff0c;打開選項界面后&#xff0c;在 Properties 頁 勾上 Generate Assembler SRC File 和 Assemble SRC File &#xff0c;如下圖所示&#xff1a; 這樣設置后…

SQLynx:一款跨平臺的企業級數據庫管理工具

SQLynx 是一款支持跨平臺&#xff08;Windows、Linux、macOS、Web&#xff09;的企業級數據庫管理和 SQL 工具&#xff0c;可以提供高效、安全且適配國產化技術棧的數據庫管理解決方案。 數據源 SQLynx 支持連接各種關系型數據庫、非關系型數據庫以及大數據平臺&#xff0c;包…

實戰項目8(實訓)

目錄 項目01 【sw1】配置 【sw2】配置 任務結果截圖 項目02 【sw1】配置 【sw2】配置 任務結果截圖 項目03 【sw1】配置 任務結果截圖 項目04 【sw1】配置 【r1】配置 任務結果截圖 項目05 【r1】配置 【r2】配置 【r3】配置 任務結果截圖 項目06 【r1】…

TCP為什么是三次握手,而不是二次?

為什么需要三次握手&#xff1f; 想象一下&#xff0c;你要給遠方的朋友寄一份重要文件。你會怎么做&#xff1f; 普通人的做法&#xff1a; 直接扔進郵箱&#xff0c;祈禱別丟了 聰明人的做法&#xff1a; 先打電話確認地址&#xff0c;再發快遞&#xff0c;最后確認收到 T…