java基礎從入門到上手(九):Java - List、Set、Map

一、List集合

????????List 是一種用于存儲有序元素的集合接口,它是 java.util 包中的一部分,并且繼承自 Collection 接口。List 接口提供了多種方法,用于按索引操作元素,允許元素重復,并且保持插入順序。常用的 List 實現類包括 ArrayList、LinkedList 和 Vector。

1.1概述

????????List 接口繼承自 Collection 接口,它支持按索引訪問元素。與 Set 不同,List 允許存儲重復元素,并且可以通過索引獲取、插入和刪除元素。

List 常用方法:

add(E e):將元素 e 添加到列表的末尾。

add(int index, E element):將元素 element 插入到指定的索引位置。

get(int index):返回指定位置的元素。

set(int index, E element):將指定位置的元素替換為新的元素。

remove(int index):刪除指定位置的元素。

remove(Object o):刪除指定的元素。

size():返回列表的元素個數。

isEmpty():檢查列表是否為空。

contains(Object o):檢查列表是否包含指定元素。

indexOf(Object o):返回元素首次出現的位置(如果不包含則返回 -1)。

lastIndexOf(Object o):返回元素最后一次出現的位置。

clear():清空列表。

1.2 實現類

1.2.1 ArrayList

ArrayList 是最常用的 List 實現,它基于動態數組來存儲元素,支持快速的隨機訪問。

優點:

1.提供快速的訪問操作(get 和 set)。

2.插入和刪除元素時,位于末尾的操作非常高效。

缺點:

1.插入和刪除元素時,尤其是對中間位置的元素,性能較差,因為需要移動元素。

1.2.2 LinkedList

LinkedList 是 List 接口的另一個實現,它基于雙向鏈表實現,因此在插入和刪除元素時效率較高,尤其是在列表的頭部和中間位置。

優點:

  1. 插入和刪除操作(尤其是在頭部或中間位置)性能較好。
  2. 支持隊列和棧的操作(通過 offer、poll、push 和 pop 方法)。

缺點:

  1. 隨機訪問性能較差,特別是當需要訪問列表中的元素時,它需要從頭部或尾部開始遍歷。

1.2.3 Vector

Vector 類與 ArrayList 類類似,也基于動態數組實現,但與 ArrayList 的區別在于,Vector 是線程安全的(每個方法都使用 synchronized 關鍵字進行同步)。但由于同步的開銷,它的性能通常較差。

優點:

  1. 線程安全。

缺點:

  1. 性能較差,因為所有的方法都進行了同步操作。
  2. ?不推薦在新代碼中使用。

二、Set集合

Set 是一個不允許重復元素的集合接口。它繼承自 Collection 接口,并且提供了與 List 不同的行為:Set 不保證元素的插入順序,并且不允許包含重復元素。因此,Set 在應用程序中用于需要保證元素唯一性的場景。

Set 接口代表一個集合,主要特點如下:

  1. 不允許包含重復的元素。
  2. 不保證元素的順序(但某些實現可能會有順序,如 LinkedHashSet)。
  3. 基本操作包括添加、刪除和查找元素。

Set 接口的常見實現類包括:

  1. HashSet:最常用的實現類,基于哈希表,不保證元素的順序。
  2. LinkedHashSet:與 HashSet 類似,但它保持插入順序。
  3. TreeSet:基于紅黑樹實現,按元素的自然順序(或自定義的比較器)對元素進行排序。

Set 接口的常用方法

add(E e):將元素 e 添加到集合中。如果集合已經包含該元素,則返回 false。

remove(Object o):刪除指定的元素。

contains(Object o):檢查集合中是否包含指定的元素。

size():返回集合中的元素數量。

isEmpty():檢查集合是否為空。

clear():清空集合中的所有元素。

iterator():返回集合元素的迭代器,通常用于遍歷集合。

2.1 HashSet

HashSet 是最常用的 Set 實現,基于哈希表實現,不保證元素的順序。它的操作通常是快速的(平均時間復雜度為 O(1)),但不保證插入順序。

2.2 LinkedHashSet

LinkedHashSet 繼承自 HashSet,它保持元素的插入順序(通過鏈表維護插入順序)。與 HashSet 相比,LinkedHashSet 的插入操作稍慢一些,但它保證了元素的順序。

2.3 TreeSet

TreeSet 是一個基于紅黑樹實現的 Set,它會自動按元素的自然順序(或指定的比較器)對元素進行排序。TreeSet 中的元素是有序的,因此它支持基于排序的操作(如查找最小元素、最大元素等)。

2.4 應用場景

去重:Set 常用于去重操作,因為它不允許包含重復元素。可以利用 Set 來確保數據的唯一性。

集合運算:可以使用 Set 來進行集合的并集、交集和差集操作。Set 提供了 retainAll(交集)、removeAll(差集)和 addAll(并集)等方法。

三、Map集合

Map 是一個用于存儲鍵值對(key-value)映射的集合接口。Map 與 Set 和 List 不同,因為它是根據鍵(key)來存儲值(value)的,而不是按照元素的順序或索引順序。Map 接口并不繼承自 Collection 接口,雖然它也可以存儲多個對象,但它的結構是以鍵值對的形式組織的。

主要特點:

  1. 鍵唯一:Map 中的每個鍵都是唯一的,但多個鍵可以對應相同的值。
  2. 無序性:Map 本身并不保證鍵值對的存儲順序,但是一些實現類(如 LinkedHashMap)可以保證順序。
  3. 支持快速查找:通過鍵可以非常高效地找到對應的值。

3.1 HashMap

HashMap 是最常用的 Map 實現類,基于哈希表實現,不保證鍵值對的順序。它的查找和插入操作平均時間復雜度是 O(1),非常高效。

3.2 LinkedHashMap

LinkedHashMap 繼承自 HashMap,除了基于哈希表存儲元素外,還通過鏈表維護鍵值對的插入順序。它保證了元素的插入順序,因此適用于需要順序存儲的場景。

3.3 TreeMap

TreeMap 是一個有序的 Map 實現類,它基于紅黑樹實現,按鍵的自然順序(或通過構造時提供的比較器)對鍵值對進行排序。它支持鍵值對的排序操作。

3.4 Hashtable

Hashtable 是一個古老的線程安全的 Map 實現,它的行為類似于 HashMap,但它是同步的,因此比 HashMap 更慢。由于現代 Java 程序更傾向于使用 ConcurrentHashMap 或其他線程安全的集合類,Hashtable 現在很少使用。

3.5Map 接口常用方法

put(K key, V value):將指定的值與指定的鍵關聯。如果鍵已經存在,則更新值。

get(Object key):返回指定鍵所映射的值。如果鍵不存在,返回 null。

containsKey(Object key):檢查 Map 是否包含指定的鍵。

containsValue(Object value):檢查 Map 是否包含指定的值。

remove(Object key):刪除指定鍵的鍵值對。

size():返回 Map 中鍵值對的數量。

isEmpty():檢查 Map 是否為空。

clear():清空 Map 中的所有鍵值對。

keySet():返回 Map 中所有鍵的集合。

values():返回 Map 中所有值的集合。

entrySet():返回 Map 中所有鍵值對的集合,Map.Entry 是 Map 鍵值對的表示。

通過以上內容便可輕松學習java 的集合類.是不是超級簡單.有任何問題歡迎留言哦!!!

重點!重點!重點!

遇到問題不用怕不如來我的知識庫找找看,也許有意想不到的收獲!!!

易網時代-易庫資源-易庫教程:.NET開發、Java開發、PHP開發、SqlServer技術、MySQL技術-開發資料大全-易網時代-易庫資源-易庫教程 (escdns.com)

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

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

相關文章

UWP發展歷程

通用Windows平臺(UWP)發展歷程 引言 通用Windows平臺(Universal Windows Platform, UWP)是微軟為實現"一次編寫,處處運行"的愿景而打造的現代應用程序平臺。作為微軟統一Windows生態系統的核心戰略組成部分,UWP代表了從傳統Win32應用向現代應…

git忽略已跟蹤的文件/指定文件

在項目開發中,有時候我們并不需要git跟蹤所有文件,而是需要忽略掉某些指定的文件或文件夾,怎么操作呢?我們分兩種情況討論: 1. 要忽略的文件之前并未被git跟蹤 這種情況常用的方法是在項目的根目錄下創建和編輯.gitig…

AI 組件庫是什么?如何影響UI的開發?

AI組件庫是基于人工智能技術構建的、面向用戶界面(UI)開發的預制模塊集合。它們結合了傳統UI組件(如按鈕、表單、圖表)與AI能力(如機器學習、自然語言處理、計算機視覺),旨在簡化開發流程并增強…

【Win】 cmd 執行curl命令時,輸出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 請為以下參數提供值: Uri: ’ ?

1.原因: 有一個名為 Invoke-WebRequest 的 CmdLet,其別名為 curl。因此,當您執行此命令時,它會嘗試使用 Invoke-WebRequest,而不是使用 curl。 2.解決辦法 在cmd中輸入如下命令刪除這個curl別名: Remov…

UE5 UE循環體里怎么寫延遲

注:需要修改UE循環藍圖節點或者自己新建個藍圖宏庫把UE循環節點的原來代碼粘貼進去修改。 一、For Loop With Delay 二、For Each Loop With Delay 示例使用: 標注參考出處:分享UE5自制Loop with delay宏,在loop循環中添加執行…

IP檢測工具“ipjiance”

目錄 IP質量檢測 應用場景 對網絡安全的貢獻 對網絡管理的幫助 對用戶決策的輔助作用 IP質量檢測 檢測IP的網絡提供商:通過ASN(自治系統編號)識別IP地址所屬的網絡運營商,例如電信、移動、聯通等。 識別網絡類型&#xff1…

[工具]Java xml 轉 Json

[工具]Java xml 轉 Json 依賴 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.37</version> </dependen…

vue3 傳參 傳入變量名

背景&#xff1a; 需求是&#xff1a;在vue框架中&#xff0c;接口傳參我們需要穿“變量名”&#xff0c;而不是字符串 通俗點說法是&#xff1a;在網絡接口請求的時候&#xff0c;要傳屬性名 效果展示&#xff1a; vue2核心代碼&#xff1a; this[_keyParam] vue3核心代碼&…

spring響應式編程系列:總體流程

目錄 示例 程序流程 just subscribe new LambdaMonoSubscriber ???????MonoJust.subscribe ???????new Operators.ScalarSubscription ???????onSubscribe ???????request ???????onNext 時序圖 類圖 數據發布者 MonoJust …

基于slimBOXtv 9.16 V2-晶晨S905L3A/ S905L3AB-Mod ATV-Android9.0-線刷通刷固件包

基于slimBOXtv 9.16 V2-晶晨S905L3A&#xff0f; S905L3AB-Mod ATV-Android9.0-線刷通刷固件包&#xff0c;基于SlimBOXtv 9 修改而來&#xff0c;貼近于原生ATV&#xff0c;僅支持晶晨S905L3A&#xff0f; S905L3AB芯片刷機。 適用型號&#xff1a;M401A、CM311-1a、CM311-1s…

使用droidrun庫實現AI控制安卓手機

使用droidrun庫實現AI控制安卓手機 介紹 DroidRun 是一個框架&#xff0c;通過LLM代理控制 Android 設備。它允許您使用自然語言命令自動化 Android 設備交互。 安裝環境 安裝源碼依賴 git clone https://github.com/droidrun/droidrun.git cd droidrun conda create --nam…

知識庫建設全流程指南(AI時代優化版)

知識庫建設全流程指南&#xff08;AI時代優化版&#xff09; ??一、知識庫建設的戰略定位?? ??核心價值錨點?? ??AI時代基建??&#xff1a;知識庫是GEO優化的核心載體&#xff0c;決定內容被AI引用的概率權重??動態護城河??&#xff1a;結構化知識體系可抵御算…

2025年03月中國電子學會青少年軟件編程(Python)等級考試試卷(五級)真題

青少年軟件編程&#xff08;Python&#xff09;等級考試試卷&#xff08;五級&#xff09; 分數&#xff1a;100 題數&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341437 一、單選題(共25題&#xff0c;共50分) 1. 以下哪個選…

基于RRT的優化器:一種基于快速探索隨機樹算法的新型元啟發式算法

受機器人路徑規劃中常用的快速探索隨機樹&#xff08;RRT&#xff09;算法的搜索機制的啟發&#xff0c;我們提出了一種新穎的元啟發式算法&#xff0c;稱為基于RRT的優化器&#xff08;RRTO&#xff09;。這是首次將RRT算法的概念與元啟發式算法相結合。RRTO的關鍵創新是其三種…

進階篇|CAN FD 與性能優化

引言 1. CAN vs. CAN FD 對比 2. CAN FD 幀結構詳解

【隨身WiFi】隨身WiFi Debian系統優化教程

0.操作前必看 本教程基于Debian系統進行優化&#xff0c;有些操作對隨身WiFi來說可能會帶來負優化&#xff0c;根據需要選擇。 所有操作需要在root用戶環境下運行&#xff0c;否則都要加sudo 隨身wifi Debian系統&#xff0c;可以去某安的隨聲WiFi模塊自行搜索刷機 點贊&am…

【Pandas】pandas DataFrame where

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前幾行DataFrame.at快速訪問和修改 DataFrame 中單個值的方法DataFrame.iat快速訪問和修改 DataFrame 中單個值的方法DataFrame.loc用于基于標簽&#xff08;行標簽和列標簽&#…

C++代碼優化

前段時間寫了一些代碼&#xff0c;但是在運算過程中發現有些代碼可以進行改進以提高運行效率&#xff0c;尤其是與PCL相關的部分&#xff0c;可以進行大幅度提高&#xff0e;特意在此進行記錄&#xff0c;分享給大家&#xff0c;也供自己查看&#xff0e; pcl::PointCloud< …

RAG-分塊策略

分塊策略在檢索增強生成&#xff08;RAG&#xff09;方法中起著至關重要的作用&#xff0c;它使文檔能夠被劃分為可管理的部分&#xff0c;同時保持上下文。每種方法都有其特定的優勢&#xff0c;適用于特定的用例。將大型數據文件拆分為更易于管理的段是提高LLM應用效率的最關…

Linux網絡編程 深入解析TFTP協議:基于UDP的文件傳輸實戰

知識點1【TFTP的概述】 學習通信的基本&#xff1a;通信協議&#xff08;具體發送上面樣的報文&#xff09;、通信流程&#xff08;按照什么步驟發送&#xff09; 1、TFTP的概述 tftp&#xff1a;簡單文件傳輸協議&#xff0c;**基于UDP&#xff0c;**不進行用戶有效性驗證 …