談談List,Set,Map的區別

ListSetMap 是 Java 集合框架(Java Collections Framework)中的三種主要接口,它們各自有不同的特點和用途。以下是它們的區別和使用場景的詳細解釋:


1. List(列表)

1.1 特點
  • 有序集合List 是一個有序集合,元素的插入順序和訪問順序一致。

  • 允許重復List 允許存儲重復的元素。

  • 索引訪問:可以通過索引(index)快速訪問元素。

  • 典型實現

    • ArrayList:基于動態數組實現,支持快速隨機訪問,但插入和刪除效率較低(需要移動元素)。

    • LinkedList:基于雙向鏈表實現,支持高效的插入和刪除操作,但隨機訪問效率較低。

    • Vector:類似于 ArrayList,但線程安全(已較少使用,推薦使用 Collections.synchronizedListCopyOnWriteArrayList)。

1.2 使用場景
  • 需要有序存儲元素:例如,存儲一系列用戶操作的記錄。

  • 需要頻繁訪問元素:例如,通過索引快速獲取元素。

  • 允許重復元素:例如,存儲多個相同的成績記錄。

1.3 示例代碼

java復制

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Java"); // 允許重復System.out.println(list.get(1)); // 訪問索引為 1 的元素:Python

2. Set(集合)

2.1 特點
  • 無序集合Set 是一個無序集合,不保證元素的插入順序。

  • 不允許重復Set 不允許存儲重復的元素,重復添加的元素會被忽略。

  • 典型實現

    • HashSet:基于哈希表實現,提供快速的插入、刪除和查找操作。

    • LinkedHashSet:基于哈希表和鏈表實現,保持插入順序。

    • TreeSet:基于紅黑樹實現,元素按自然順序或指定的比較器排序。

2.2 使用場景
  • 需要去重:例如,存儲一組不重復的用戶 ID。

  • 不需要順序:例如,存儲一組隨機的標簽。

  • 需要快速查找:例如,檢查某個元素是否存在于集合中。

2.3 示例代碼

java復制

Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重復元素會被忽略System.out.println(set); // 輸出:[Java, Python]

3. Map(映射)

3.1 特點
  • 鍵值對存儲Map 是一種鍵值對(Key-Value)的集合,每個鍵映射到一個值。

  • 鍵唯一:鍵必須是唯一的,但值可以重復。

  • 無序集合Map 不保證鍵值對的順序(某些實現如 TreeMapLinkedHashMap 除外)。

  • 典型實現

    • HashMap:基于哈希表實現,提供快速的插入、刪除和查找操作。

    • TreeMap:基于紅黑樹實現,按鍵的自然順序或指定的比較器排序。

    • LinkedHashMap:基于哈希表和鏈表實現,保持插入順序或訪問順序。

3.2 使用場景
  • 需要鍵值對存儲:例如,存儲用戶 ID 和用戶信息的映射。

  • 需要快速查找:例如,根據鍵快速獲取對應的值。

  • 需要保持順序:例如,使用 LinkedHashMap 保持插入順序。

3.3 示例代碼

java復制

Map<String, Integer> map = new HashMap<>();
map.put("Java", 10);
map.put("Python", 20);
map.put("Java", 30); // 鍵重復時會覆蓋值System.out.println(map.get("Java")); // 輸出:30

4. List、Set 和 Map 的區別

特性ListSetMap
存儲方式有序集合,允許重復無序集合,不允許重復鍵值對集合,鍵唯一
典型用途存儲有序數據,允許重復存儲唯一數據,去重存儲鍵值對,快速查找
插入順序保持插入順序不保證順序(LinkedHashSetTreeSet 除外)不保證順序(LinkedHashMapTreeMap 除外)
性能隨機訪問快(ArrayList插入和查找快(HashSet插入和查找快(HashMap
線程安全需手動同步(Vector需手動同步(Collections.synchronizedSet需手動同步(Collections.synchronizedMap
典型實現ArrayListLinkedListHashSetLinkedHashSetTreeSetHashMapTreeMapLinkedHashMap

5. 總結

  • List

    • 有序集合,允許重復。

    • 適合需要有序存儲和頻繁訪問元素的場景。

  • Set

    • 無序集合,不允許重復。

    • 適合需要去重和快速查找的場景。

  • Map

    • 鍵值對集合,鍵唯一。

    • 適合需要根據鍵快速查找值的場景。

在實際開發中,選擇合適的集合類型取決于具體需求。例如:

  • 如果需要存儲有序的重復數據,使用 List

  • 如果需要存儲唯一數據,使用 Set

  • 如果需要存儲鍵值對關系,使用 Map

如果你還有其他問題,歡迎繼續提問!

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

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

相關文章

智能運維管理系統的主要優勢

智能運維管理系統通過整合大數據、人工智能、機器學習等技術&#xff0c;顯著提升了IT運維的效率和質量。以下是智能運維管理系統的主要優勢&#xff1a; 一、提升運維效率 1.自動化運維 自動執行重復性任務&#xff08;如日志分析、故障排查、系統備份&#xff09;&#xf…

分享一個用來解決運維問題的 AI 提示詞

模板如下&#xff08;每次我都是自己寫的&#xff0c;但是感覺可以更加調優一些&#xff09; 我遇到了如下問題<問題的清晰描述>你是一位資深運維工程師&#xff0c;任務是指導我一步步排查并解決上面的問題排查過程中&#xff0c;你給我操作指示&#xff0c;我將操作的…

【python運行Janus-Pro-1B文生圖功能】

前言 體驗了一把本地部署Janus-Pro-1B實現文生圖功能。 1、開源項目下載 官方開源項目代碼直接從Github上下載。 2、模型下載 模型官方下載需要魔法 Janus-Pro-1B模型文件&#xff1a;Janus-Pro-1B模型文件 百度網盤&#xff1a; https://pan.baidu.com/s/16t4H4z-QZe2UDAg4…

跨越時空的對話:圖靈與GPT-4聊AI的前世今生

&#xff08;背景&#xff1a;虛擬咖啡廳&#xff0c;圖靈身著1950年代西裝&#xff0c;端著一杯熱茶&#xff0c;GPT-4以全息投影形態坐在對面&#xff09; 圖靈&#xff08;喝了口茶&#xff09;&#xff1a;“聽說你能寫詩&#xff1f;我當年在布萊切利園破解Enigma時&…

L2-4 吉利矩陣

輸入樣例&#xff1a; 7 3輸出樣例&#xff1a; 666 這道題是暴力純搜&#xff0c;但是很難想&#xff0c;我這個是看的別人的代碼 #include "bits/stdc.h" using namespace std; int x[20][20]; int l, n; int cnt 0; int sumx[5], sumy[5]; void dfs(int x, in…

Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平臺

介紹 生產服務應用可觀測性在當下比較流行的方案&#xff0c;其中出現了大量高性能、開箱即用、易上手的的開源產品&#xff0c;大大豐富了在可觀測性領域產品的多樣性&#xff0c;本文講述基于OTLP協議推送Java項目遙測數據&#xff08;日志、指標、鏈路&#xff09;到后端存儲…

SpringMVC (一)基礎

目錄 SpringMVC 一 簡單使用 1 新建模塊選擇指定參數 2 創建實現類 3 將項目啟動 4 運行結果&#xff1a;在瀏覽器當中響應執行 二 RequestMapping 三 請求限定 SpringMVC SpringMVC是Spring的web模塊&#xff0c;用來開發Web應用&#xff0c;SpringMVC應用最終作為B/…

【機器人-基礎知識】歐拉角、旋轉矩陣和四元數

1. 歐拉角 1.1. 歐拉角的定義 歐拉角是一組三個角度,用于描述一個剛體在三維空間中的定向關系。具體來說,它們表示從一個固定參考坐標系到剛體坐標系的一系列旋轉。常見的定義方式是將總體旋轉分解為三個連續的簡單旋轉,每次旋轉都繞著當前坐標系的某一固定軸進行。 例如,…

xxl-job部署在docker-destop,實現定時發送預警信息給指定郵箱

XXL-JOB XXL-JOB是一個分布式任務調度平臺&#xff08;XXL是作者徐雪里姓名拼音的首字母&#xff09;&#xff0c;其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。 源碼倉庫地址&#xff1a;https://github.com/xuxueli/xxl-job 源碼結構&#xff1a; 系統架構 在xxl-j…

大數據學習(63)- Zookeeper詳解

&&大數據學習&& &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主哦&#x1f91e; &#x1f…

【數據結構】3順序表

0 章節 &#xff12;&#xff0e;&#xff11;到&#xff12;&#xff0e;&#xff13;小節。 理解與表達線性表的邏輯結構&#xff1b; 線性表的結構、結構與操作&#xff1b; 順序表的表示與實現&#xff1b;順序表應用&#xff1b; 重點 線性表概念、順序表定義運算與實現&a…

CUDA編程之OpenCV與CUDA結合使用

OpenCV與CUDA的結合使用可顯著提升圖像處理性能。 一、版本匹配與環境配置 CUDA與OpenCV版本兼容性? OpenCV各版本對CUDA的支持存在差異&#xff0c;例如OpenCV 4.5.4需搭配CUDA 10.0?2&#xff0c;而較新的OpenCV 4.8.0需使用更高版本CUDA?。 需注意部分模塊&#xff08;…

WPF從初學者到專家:實戰項目經驗分享與總結

WPF從初學者到專家&#xff1a;實戰項目經驗分享與總結 一、前言二、WPF 基礎概念與入門2.1 什么是 WPF2.2 XAML 基礎2.3 數據綁定基礎 三、第一個 WPF 項目&#xff1a;簡單的待辦事項列表3.1 項目需求分析3.2 項目搭建與界面設計3.3 業務邏輯實現 四、中級項目&#xff1a;音…

一學就會的深度學習基礎指令及操作步驟(3)模型訓練驗證

文章目錄 模型訓練驗證損失函數和優化器模型優化訓練函數驗證函數模型保存 模型訓練驗證 損失函數和優化器 loss_function nn.CrossEntropyLoss() # 損失函數 optimizer Adam(model.parameters()) # 優化器&#xff0c;優化參數模型優化 獲得模型所有的可訓練參數&#x…

Spring Boot 注解大全:全面解析與實戰應用

目錄 一、Spring Boot 啟動與配置相關注解 1.1 SpringBootApplication 1.2 EnableAutoConfiguration 1.3 Configuration 1.4 ComponentScan 二、依賴注入與組件管理注解 2.1 Component 2.2 Service 2.3 Repository 2.4 Controller 2.5 RestController 2.6 Autowired…

【語料數據爬蟲】Python爬蟲|批量采集征集意見稿數據(1)

前言 本文是該專欄的第5篇,后面會持續分享Python爬蟲采集各種語料數據的的干貨知識,值得關注。 在本文中,筆者將主要來介紹基于Python,來實現批量采集“征集意見稿”數據。同時,本文也是采集“征集意見稿”數據系列的第1篇。 采集相關數據的具體細節部分以及詳細思路邏輯…

企業招聘能力提升之道:突破困境,精準納才

企業招聘能力提升之道&#xff1a;突破困境&#xff0c;精準納才 在企業運營的廣袤版圖中&#xff0c;招聘工作無疑是一塊至關重要的拼圖。然而&#xff0c;不少企業在這片領域中舉步維艱&#xff0c;盡管投入了海量的時間與精力&#xff0c;收獲的成果卻不盡人意。面試環節仿…

AI對前端開發的沖擊

Cursor cursor新版本0.46版本號中有部分是改成了新布局其實 Agent 和 Edit 和 Composer 是一樣的&#xff0c;為了方便大家使用&#xff0c;我們把它們合并了&#xff0c;Edit 相當于普通模式下的 Composer&#xff0c;Agent 就是代理模式。 快捷鍵ctrli、ctrll、ctrlk 4o適合…

java中如何把json轉化的字符串再轉化成json格式

使用org.json庫 首先&#xff0c;確保你的項目中已經包含了org.json庫。如果你使用Maven&#xff0c;可以在pom.xml中添加以下依賴&#xff1a; <dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20210307…

泛型、泛型上限、泛型下限、泛型通配符

DAY8.1 Java核心基礎 泛型 Generics 是指在類定義時不指定類中信息的具體數據類型&#xff0c;而是用一個標識符來代替&#xff0c;當外部實例化對象時再指定具體的數據類型。 在定義類或者接口時不明確指定類中信息的具體數據類型&#xff0c;在實例化時再來指定具體的數據類…