【Map vs Set】:Java數據存儲的“雙子星”對決

?個人主頁:?喜歡做夢

歡迎??👍點贊? ?關注? ??收藏? 💬評論


目錄

🍰一、搜索

🍮1.概念

🍮2.模型

🍰二、Map

🍨1.什么是Map?

🍨2.Map的實例化

🍨3.Map的常見方法

🍨4.Map方法的使用

🍰三、Set

🍯1.什么是Set?

🍯2.Set的常見方法

🍯3.Set方法的使用

🍰四、Map和Set的區別


🍰一、搜索

🍮1.概念

搜索:是指在數據集合過程中查找特定元素或滿足特定條件元素的過程。如:在一組數組中查找特定的數字。常見的搜索有直接遍歷和二分查找.....

直接遍歷和二分查找比較適合靜態類型的查找,即一般不會對區間進行插入和刪除操作。

所以當需要動態查找時,即查找時要進行一些插入和刪除,上述的方法并不適用?。如:在學生系統中,快速查找學生的成績、統計單詞出現的次數、確保用戶名唯一(去重)。

Map和Set是一種專門用來進行搜索的容器或者數據結構,是一種適合動態查找的集合容器。

🍮2.模型

一般把搜索的數據稱為關鍵字(key),和關鍵字對應的稱為值(value),所以有兩種模型:

  • 1.純key模型:由唯一的鍵(key)組成,沒有與鍵直接關聯的特定值(value)。

? ? ? 特點:重點在于對鍵的管理和操作,常用于判斷某個元素是否存在。

? ? ? 應用場景:數據去重,黑名單過濾等......

  • 2.key-value模型:是一種鍵(key)和值(value)進行相關聯的數據組織形式。每個鍵都對應著一個特定的值,通過鍵可以快速查找、更新與之關聯的值。如查找在一串字符串中查找,某個單詞在該字符串中出現的次數。

? ? ? ?特點:鍵是唯一的,用于快速定位和訪問對應的值,其值可以是各種類型的數據。

? ? ? ?應用場景:廣泛應用于配置文件、數據庫等,比如,以用戶ID為鍵,存儲用戶姓名等為值。

Set只存儲了key,Map存儲的就是key—value的鍵對值。

🍰二、Map

🍨1.什么是Map?

Map是接口類,該類沒有繼承Collection,儲存的是<K,V>結構的鍵值對,并且K一定是唯一的,不能重復。

🍨2.Map的實例化

Map<K,V>是將鍵(key)與值(value)進行關聯的數據結構,K代表鍵的類型,V代表值的類型。

Map的實現類主要有HashMap,TreeMap

實例化的實現:

 public static void main(String[] args) {Map<String,Integer> map1=new HashMap<>();Map<String,Integer> map2=new TreeMap<>();}
  • ?Map是一個接口,不能直接實例化對象,如果要實例化對象只能通過其實現類TreeMap或者HashMap來實現

🍨3.Map的常見方法

方法解釋
V put(K key,V value)

設置key值與value值相關聯

V remove(Object key)將key對應的映射關系刪除
V remove(Object key,Object value)只有指定的鍵與指定的值相匹配時才可以刪除
V get(Object key)返回key對應的value值
V getOrDefault(Object key,V defalutValue)返回key對應的value,key不存在,返回默認值

Set<K> keySet()

返回key中的不重復集合

Collection<V> values()

返回value的可重復集合
Set<Map.Entry<K,V>> entrySet()返回所有的key-value的映射關系
boolean containsKey(Object key)判斷是否包含key
boolean containsValue(Object value)判斷是否包含value

🍨4.Map方法的使用

public static void main(String[] args) {Map<String,Integer> map=new HashMap<>();//map:設置k,v值map.put("a",2);map.put("c",5);map.put("s",21);//get:獲取key對應的value值System.out.println(map.get("a"));//2System.out.println(map.get("b"));//不存在key值,其默認值為null//getOrDefault://如果map中有key值,返回key對應的value1值,否則返回設置的默認值System.out.println(map.getOrDefault("a",1));//2System.out.println(map.getOrDefault("b",3));//3//remove1:如果key值與指定的值相匹配,刪除;否則,不刪除map.remove("a",1);//不匹配不刪除System.out.println(map.get("a"));//a對應的value還是2//remove2:刪除key對應的value值map.remove("a");System.out.println(map.get("a"));//null//containsKey:判斷是否包含keySystem.out.println(map.containsKey("c"));//true//containsValue:判斷是否包含value值System.out.println(map.containsValue(10));//falseMap<String,Integer> map1=new TreeMap<>();map1.put("a",2);map1.put("a",3);map1.put("b",3);map1.put("c",6);//Set<K> keySet:返回key中不重復的集合Set<String> keySet=map1.keySet();System.out.println(keySet);//[a, b, c]//Collection<V> values:返回value中可重復的集合Collection<Integer> value=map1.values();System.out.println(value);//[3, 3, 6]//Set<K,V>> entrySet:返回key-value所有的映射關系Set<Map.Entry<String,Integer>> entrySet=map1.entrySet();System.out.println(entrySet);//[a=3, b=3, c=6]}

注意事項:

  • Map中存放鍵值對的Key是唯一的,value是可重復的,當put相同的key,不同的value值時,只是將key所對應的value值進行替換,以最后存放的value為主;?
public static void main(String[] args) {Map<String,Integer> map=new HashMap<>();map.put("a",11);map.put("a",24);map.put("a",15);System.out.println(map.get("a"));//15
}
  • 在HashMap中存放的key和value可以都為空,在TreeMap中插入鍵對值時,key不能為空,value可以為空;

HashMap

 public static void main(String[] args) {Map<String,Integer> map1=new HashMap<>();map1.put("a",null);map1.get("a");//無異常map1.put(null,null);map1.get(null);//無異常}

?TreeMap

  public static void main(String[] args) {Map<String,Integer> map1=new TreeMap<>();map1.put("a",null);map1.get("a");//無異常map1.put(null,2);map1.get(null);//報錯}

  • ?Map中鍵值對的key不能直接修改,可以直接修改value值,如果要修改key,只能將key刪除,在進行重新插入。
  • ?HashMap和TreeMap是Map的接口實現類,用于存儲鍵對值數據,以下是他們的區別:
Map的底層結構TreeMapHashMap
底層結構紅黑樹哈希表(數組+鏈表/紅黑樹)
插入/刪除/查找時間復雜度O(log2N)O(1)
是否有序關于Key有序無序
允許null鍵不允許,需可比較允許null鍵
線程安全不安全不安全
插入/刪除/查找區別需要進行元素比較通過哈希函數計算哈希地址
比較與覆寫key必須能夠比較,否則會拋出異常自定義類型需要覆寫equals和hashCode方法
應用場景需要key有序無序有序,需要更高的時間性能

🍰三、Set

🍯1.什么是Set?

Set是一個接口,繼承自Collection接口,有HashSet、TreeSet等實現類,HashSet基于哈希表實現,不保證元素有序;TreeSet基于紅黑樹實現,會對元素進行排序。

🍯2.Set的常見方法

方法解釋
boolean add(E e)添加元素,但元素重復不添加
boolean remove(Object o)刪除集合中元素o
boolean contains(Object o)判斷o是否包含在集合中
boolean isEmpty()檢測是否為空,為空返回false,否則返回true
void clear()清空
Iterator<E> iterator()使用迭代器遍歷集合中的對象
int size()返回set中元素個數
Object[] toArray()將set中的元素轉換為數組返回
boolean containsAll(Collection<?>c)集合中的元素是否在set中的全部存在,是返回true,否則返回false
boolean addAll(Collection<? extend)將集合c中的元素添加到set中,可以達到去重的效果

🍯3.Set方法的使用

 public static void main(String[] args) {public static void main(String[] args) {Set<Integer> set1=new HashSet<>();//add:添加元素set1.add(5);set1.add(20);set1.add(15);set1.add(8);//remove:移除元素set1.remove(20);//是否包含該元素System.out.println(set1.contains(5));//trueSystem.out.println(set1.contains(2));//false//Iterator:遍歷集合Iterator<Integer> iterator=set1.iterator();while(iterator.hasNext()){System.out.print(iterator.next()+" ");//5 8 15}System.out.println();//isEmpty:判斷是否為空System.out.println(set1.isEmpty());//false:不為空//size:計算元素個數System.out.println(set1.size());//3//toArray:將set中的元素轉換為數組Integer[] toArray=set1.toArray(new Integer[0]);for (Integer x:toArray) {System.out.print(x+" ");//5 8 15}System.out.println();//containsAll:set是否包含指定集合的所有元素Set<Integer> set2=new HashSet<>();set2.add(1);set2.add(2);set2.add(3);Set<Integer> set3=new HashSet<>();set3.add(1);set3.add(2);//看set2中是否都包含set3集合中的元素boolean containsAll=set2.containsAll(set3);System.out.println(containsAll);//true//addAll:將集合中的元素添加到set中Set<Integer> set4=new TreeSet<>();set4.add(1);set4.add(5);set4.add(19);Set<Integer> set5=new TreeSet<>();set5.add(2);set5.add(1);set5.add(6);boolean addAll=set4.addAll(set5);Iterator<Integer> iterator1=set4.iterator();while(iterator1.hasNext()){//如果是HashSet那么不自動排序,如果是TreeSet就自動排序System.out.print(iterator1.next()+" ");//1 2 5 6 19}

注意:

  • ?Set只存儲了key,并且要求key一定要唯一,其key值不能進行修改,如果要進行修改需要刪除后再插入。
  • Set可以對集合進行去重;
  • TreeSet的底層是使用Map來實現的,其使用key與Object的一個默認對象作為鍵值對插入到Map中;
  • TreeSet和HashSet的區別
Set底層結構TreeSetHashSet
底層結構紅黑樹哈希表
插入/刪除/查找時間復雜度O(log2N)O(1)
是否有序key有序不一定有序
允許null鍵不允許,需可比較允許null鍵
線程安全不安全不安全
插入/刪除/查找區別按照紅黑樹的特性來進行插入和刪除1.先計算key哈希地址2.然后進行插入和刪除
比較與覆寫key必須能夠比較,否則會拋出ClassCastException異常

自定義類型需要覆寫equals和hashCode方法

應用場景需要key有序無關有序,需要更高的時間性能

🍰四、Map和Set的區別

區別MapSet
存儲形式是一種鍵對值(key-value)集合是值的集合,值存在單一的值,不存在重復元素
訪問方式get(key)方法沒有鍵對值的映射,一般通過for循環或者迭代器遍歷
唯一性鍵是唯一的,不用重復,值可以重復所有元素都是唯一的
應用場景需要建立映射關系的場景需要確保元素唯一的場景

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

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

相關文章

【C語言 】C語言 桌游開發數字競拍(源碼)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【C語言 】C語言 桌游開發數字競拍&#xff08;源碼…

Reinforcement Learning Heats Up 強化學習持續升溫

Reinforcement Learning Heats Up 強化學習持續升溫 核心觀點&#xff1a;強化學習正成為構建具有高級推理能力大語言模型&#xff08;LLMs&#xff09;的重要途徑。 最新進展 模型示例&#xff1a;近期出現了如DeepSeek - R1及其變體&#xff08;DeepSeek - R1 - Zero&#xf…

Whisper+T5-translate實現python實時語音翻譯

1.首先下載模型&#xff0c;加載模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

湖倉分析|浙江霖梓基于 Doris + Paimon 打造實時/離線一體化湖倉架構

導讀&#xff1a;浙江霖梓早期使用 CDH 產品套件搭建了大數據系統&#xff0c;面臨業務邏輯冗余、查詢效率低下等問題&#xff0c;基于 Apache Doris 進行整體架構與表結構的重構&#xff0c;并基于湖倉一體和查詢加速展開深度探索與實踐&#xff0c;打造了 Doris Paimon 的實…

git bash在github的庫中上傳或更新本地文件

一、將本地文件上傳到 GitHub 倉庫 1. 創建 GitHub 倉庫 如果你還沒有在 GitHub 上創建倉庫&#xff0c;首先需要創建一個新的倉庫&#xff1a; 登錄到 GitHub。點擊右上角的 按鈕&#xff0c;選擇 New repository。給你的倉庫起個名字&#xff0c;并選擇 Public 或 Privat…

Jmeter壓測怎么控制TPS

壓測固定TPS的接口 有些任務需要我們控制接口的TPS&#xff0c;例如每秒請求一次。 TPS定時器 然后1個并發持續運行 壓測結果 需要注意TPS在1.0/s左右&#xff0c;有時可能是1.2、1.3&#xff0c;定時器會自動調整壓力&#xff0c;讓TPS保持在1.0左右。

ArcGISPro 新建shp+數據結構

import arcpy# 設置工作空間和 Shapefile 存放路徑 shp_path r"C:\path\to\your\folder\PolygonZY.shp" # Shapefile 存放路徑 fields [("CHBH", "TEXT", 20),("ZCMC", "TEXT", 100),("ZCLX", "TEXT"…

理解WebGPU 中的 GPUAdapter :連接瀏覽器與 GPU 的橋梁

在 WebGPU 開發中&#xff0c; GPUAdapter 是一個至關重要的對象&#xff0c;它作為瀏覽器與 GPU 之間的橋梁&#xff0c;為開發者提供了請求 GPU 設備、查詢 GPU 特性以及獲取適配器信息的能力。本文將詳細介紹 GPUAdapter 的核心屬性和方法&#xff0c;并通過實際代碼…

信呼OA辦公系統sql注入漏洞分析

漏洞描述 信呼OA辦公系統uploadAction存在SQL注入漏洞&#xff0c;攻擊者可利用該漏洞獲取數據庫敏感信息。 環境搭建 源碼下載地址&#xff1a;https://github.com/rainrocka/xinhu 下載后解壓到本地網站根目錄下&#xff0c;配置好數據庫&#xff0c;然后安裝即可 默認密…

vue框架生命周期詳細解析

Vue.js 的生命周期鉤子函數是理解 Vue 組件行為的關鍵。每個 Vue 實例在創建、更新和銷毀過程中都會經歷一系列的生命周期階段&#xff0c;每個階段都有對應的鉤子函數&#xff0c;開發者可以在這些鉤子函數中執行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分為以下幾…

一文深入了解DeepSeek-R1:模型架構

本文深入探討了 DeepSeek-R1 模型架構。讓我們從輸入到輸出追蹤 DeepSeek-R1 模型&#xff0c;以找到架構中的新發展和關鍵部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架構。本文旨在涵蓋其設計的所有重要方面。 &#x1f4dd; 1. 輸入上下文長度 DeepSeek-R1的輸入上下文長…

開發基礎(8):鴻蒙圖表開發

mpchart mpchart是一個包含各種類型圖表的圖表庫,主要用于業務數據匯總,例如銷售數據走勢圖,股價走勢圖等場景中使用,方便開發者快速實現圖表UI,mpchart主要包括線形圖、柱狀圖、餅狀圖、蠟燭圖、氣泡圖、雷達圖、瀑布圖等自定義圖表庫。 柱狀圖 導入import {BarChart, …

條款03:盡可能使用 const

const 允許我們指定一個語義約束&#xff0c;使某個值應該保持不變 1、const 修飾 變量&#xff0c;指針&#xff0c;函數&#xff0c;函數返回值等&#xff0c;可以使程序減少錯誤&#xff0c;或者更容易檢測錯誤&#xff1a; 指針常量&#xff1a;int* const p;//指針地址不…

算法兵法全略(譯文)

目錄 始計篇 謀攻篇 軍形篇 兵勢篇 虛實篇 軍爭篇 九變篇 行軍篇 地形篇 九地篇 火攻篇 用間篇 始計篇 算法&#xff0c;在當今時代&#xff0c;猶如國家關鍵的戰略武器&#xff0c;也是處理各類事務的核心樞紐。算法的世界神秘且變化萬千&#xff0c;不夠賢能聰慧…

開關電源實戰(一)寬范圍DC降壓模塊MP4560

系列文章目錄 文章目錄 系列文章目錄MP4560MP4560 3.8V 至 55V 的寬輸入范圍可滿足各種降壓應用 MOSFET只有250mΩ 輸出可調0.8V-52V SW:需要低VF肖特基二極管接地,而且要靠近引腳,高壓側開關的輸出。 EN:輸入使能,拉低到閾值以下關閉芯片,拉高或浮空啟動 COMP:Compens…

微軟AutoGen高級功能——Magentic-One

介紹 大家好&#xff0c;博主又來給大家分享知識了&#xff0c;這次給大家分享的內容是微軟AutoGen框架的高級功能Magentic-One。那么它是用來做什么的或它又是什么功能呢&#xff0c;我們直接進入正題。 Magentic-One Magnetic-One是一個通用型多智能體系統&#xff0c;用于…

DeepSeek是如何通過“蒸餾”技術打造自己的AI模型

1 引言&#xff1a; 最近&#xff0c;外媒對中國公司——DeepSeek進行了猛烈抨擊&#xff0c;指控其采用了所謂的“蒸餾”&#xff08;Distillation&#xff09;技術&#xff0c;涉嫌抄襲甚至作弊。那么&#xff0c;什么是“蒸餾”技術&#xff1f; 在人工智能領域&#xff0c;…

【廣州大學主辦,發表有保障 | IEEE出版,穩定EI檢索,往屆見刊后快至1個月檢索】第二屆電氣技術與自動化工程國際學術會議 (ETAE 2025)

第二屆電氣技術與自動化工程國際學術會議 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大會官網&#xff1a;http://www.icetae.com/【更多詳情】 會議時間&#xff1a;2025年4月25-27日 會議地點&#xff1a…

伯克利 CS61A 課堂筆記 08 —— Strings and Dictionaries

本系列為加州伯克利大學著名 Python 基礎課程 CS61A 的課堂筆記整理&#xff0c;全英文內容&#xff0c;文末附詞匯解釋。 目錄 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …

基于 GEE 計算研究區年均地表溫度數據

目錄 1 代碼解析 2 完整代碼 3 運行結果 1 代碼解析 &#xff08;1&#xff09;定義研究區&#xff1a; // 研究區的范圍需要自己提前上傳 var dataset table;// 將研究區顯示在中心&#xff0c;后面的數字為縮放等級&#xff0c;范圍從1 - 24 Map.centerObject(dataset,…