最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入聊一聊JDK中的Map和Set

 更新時間:2022年12月21日 11:51:46   作者:你們的偉仔  
這篇文章主要給大家介紹了關(guān)于JDK中Map和Set的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家學習或者使用jdk具有一定的參考學習價值,需要的朋友可以參考下

1. 基礎(chǔ)知識

集合Java.util包下的常用子類,集合無非就是各種數(shù)據(jù)結(jié)構(gòu)的應(yīng)用。集合存在的目的就是為了將數(shù)據(jù)高效的進行讀寫,無論哪種具體的集合無外乎CURD。

Map和set是一種專門用來進行搜索的容器或者數(shù)據(jù)結(jié)構(gòu)(核心應(yīng)用場景:高效搜索/查找)。

Map和Set是 一種適合動態(tài)查找的集合容器。

Set集合只能保存單個的元素。集合中所有元素是唯一的不重復(fù)的。

Map集合一次保存一個鍵值對(key = value)這種映射對象。

數(shù)學中的映射其實就是Java中的Map集合,存儲的都是一個key對于一個value的映射關(guān)系。

在Map映射關(guān)系中,key值唯一的,value值可以重復(fù)。

Collection --> 單個元素保存的父接口。

List --> 可以保存重復(fù)的單個元素

Set --> 保存單個不重復(fù)元素。

Queue --> 隊列接口,操作受限的線性表。

Deque --> 雙端隊列,使用此接口來表示棧或者隊列。

2.模型

般把搜索的數(shù)據(jù)稱為關(guān)鍵字(Key),和關(guān)鍵字對應(yīng)的稱為值(Value),將其稱之為Key-value的鍵值對,所以 模型會有兩種:

1. 純 key 模型,比如:

有一個英文詞典,快速查找一個單詞是否在詞典中

2. Key-Value 模型,比如:

統(tǒng)計文件中每個單詞出現(xiàn)的次數(shù),統(tǒng)計結(jié)果是每個單詞都有與其對應(yīng)的次數(shù):<單詞,單詞出現(xiàn)的次數(shù)>

梁山好漢的江湖綽號:每個好漢都有自己的江湖綽號

而Map中存儲的就是key-value的鍵值對,Set中只存儲了Key。

3.Map的使用

Map:存儲的key-value鍵值對,若需要根據(jù)不重復(fù)的key去查找value的內(nèi)容,使用Map集合。

4.Map接口的使用

常用的兩個子類:

HashMap底層基于哈希表(數(shù)組+鏈表)的實現(xiàn)。

TreeMap底層基于二分搜索平衡樹的實現(xiàn)。

(1)元素的添加和更新操作

a.元素的添加和更新操作都是一個方法。put(K key,V value):將鍵值對key和value保存到當前的Map集合中。若key值已經(jīng)存在,則更新value的值。

1.Map集合中,key值不能重復(fù),若put時,發(fā)現(xiàn)key重復(fù),則會將當前Map中對應(yīng)的value值更新為此時的value的值。

2.value值可以重復(fù)。

3.在Map集合中,鍵值對是"無序"的,元素的保存順序和添加順序無關(guān)。

4.關(guān)于Map集合中保存null值

a.HashMap:key和value都可以為null。key值是唯一的,只能保存一個null的key。

b.在TreeMap中key值不能為null,value值可以為null。并且key值必須實現(xiàn)Compareable接口或者通過TreeMap的構(gòu)造方法傳入比較器對象!換句話說:保存在TreeMap的Key值必須是可比較的。TreeMap也是無序的(添加順序和保存順序不是一一對應(yīng))

c.在Map集合中,元素的添加順序和保存順序相同的子類是LinkedHaspMap。

且LinkedHaspMap有序的,添加順序和保存順序一一對應(yīng)。

LinkedHashMap:給普通的HaspMap加了個鏈表,這個鏈表就保存了元素的添加順序。

在開發(fā)中可以改造LinkedHaspMap做LRU緩存。

(2)在Map集合中查詢/搜索特定的值

get(K key):根據(jù)key值搜索對應(yīng)的value值,若沒有對應(yīng)的key值,返回null。

getOrDefault(K key,V defaultVal):根據(jù)key值搜索map中對應(yīng)的value值,若沒有找到,返回默認值defaultValue。getOrDefault方法常和put方法搭配使用,簡化代碼邏輯。

boolean.containsKey(K key):在當前Map集合中是否包含指定的key值。

boolean containsValue(V value):在當前Map集合中是否包含指定的value值。

(3) 刪除Map中指定的value和key

remove(K key):刪除key值對應(yīng)的鍵值對對象,返回刪除之前的value值。

remove(K key,V value):刪除指定的key值以及對應(yīng)的value值對象,返回布爾值表示是否刪除成功。

clear():清空Map表(將當前Map中所有鍵值對對象一次清空)。

 (4) Map集合的遍歷

Map集合的遍歷是比較低效的。

for-each循環(huán)只能用于Iterable接口以及子類,Map集合和Iterable接口毫無關(guān)系。

要想進行Map集合的遍歷,必須先將Map轉(zhuǎn)為Set集合。

Map接口在存儲鍵值對對象時,內(nèi)部存儲的一個個都是Map.Entry對象。

1.將Map對象轉(zhuǎn)為Set對象,Set對象的內(nèi)部就存儲Map的一個個鍵值對Entry對象。

轉(zhuǎn)為Set對象之后,就可以方便的使用for-each循環(huán)進行遍歷。

其中的每個元素就是Map的Entry對象!

也可以分別輸出key值和value值,這時重復(fù)的value也會重復(fù)輸出。

 5.Set集合的使用

Set (Java Platform SE 8 )

Set與Map主要的不同有兩點:Set是繼承自Collection的接口類,Set中只存儲了Key。

 add(E e):向當前Set集合中添加一個新的元素e,若e不存在則成功添加,返回true;若e存在,添加失敗,返回false。因此方便的使用Set集合的add方法做去重處理。

boolean remove(object o):刪除指定元素o            (boolean返回值類型)

boolean contains(object o):查詢當前Set集合中是否包含元素o

在Set集合中沒有提供元素的修改方法。要向修改,先將這個元素刪了,再添加新值。

6.Set集合和Map集合的關(guān)系

Set是保存單個不重復(fù)元素的集合,Map是保存一對鍵值對對象的集合。

Set的常用子類如HashSet,TreeSet,內(nèi)部就使用的是對應(yīng)的Map對象。

HashSet元素就在HashMap的key值上保存。

TreeSet元素就在TreeMap的key值上保存。

總結(jié)

到此這篇JDK中Map和Set的文章就介紹到這了,更多相關(guān)JDK的Map和Set內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通過FTP服務(wù)器上傳下載文件的方法

    Java通過FTP服務(wù)器上傳下載文件的方法

    本文介紹了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服務(wù)器實現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下
    2015-07-07
  • SpringBoot集成logback打印彩色日志的代碼實現(xiàn)

    SpringBoot集成logback打印彩色日志的代碼實現(xiàn)

    Logback是由log4j創(chuàng)始人設(shè)計的另一個開源日志組件,默認情況下,Spring?Boot會用Logback來記錄日志,并用INFO級別輸出到控制臺,本文給大家介紹了SpringBoot集成logback打印彩色日志,需要的朋友可以參考下
    2024-03-03
  • SpringBoot如何動態(tài)修改Scheduled(系統(tǒng)啟動默認執(zhí)行,動態(tài)修改)

    SpringBoot如何動態(tài)修改Scheduled(系統(tǒng)啟動默認執(zhí)行,動態(tài)修改)

    這篇文章主要介紹了SpringBoot如何動態(tài)修改Scheduled(系統(tǒng)啟動默認執(zhí)行,動態(tài)修改)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot 如何使用@Async整合線程池

    Springboot 如何使用@Async整合線程池

    這篇文章主要介紹了Springboot 使用@Async整合線程池的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java利用JEXL實現(xiàn)動態(tài)表達式編譯

    java利用JEXL實現(xiàn)動態(tài)表達式編譯

    這篇文章主要介紹了java利用JEXL實現(xiàn)動態(tài)表達式編譯,系統(tǒng)要獲取多個數(shù)據(jù)源的數(shù)據(jù),并進行處理,最后輸出多個字段。字段的計算規(guī)則一般是簡單的取值最多加一點條件判斷,下面是具體的實現(xiàn)方法
    2021-04-04
  • 配置DispatcherServlet的方法介紹

    配置DispatcherServlet的方法介紹

    今天小編就為大家分享一篇關(guān)于配置DispatcherServlet的方法介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Hibernate框架數(shù)據(jù)分頁技術(shù)實例分析

    Hibernate框架數(shù)據(jù)分頁技術(shù)實例分析

    這篇文章主要介紹了Hibernate框架數(shù)據(jù)分頁技術(shù),結(jié)合實例形式分析了Hibernate框架實現(xiàn)數(shù)據(jù)分頁的原理,步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • 快速搭建一個SpringBoot項目(純小白搭建教程)

    快速搭建一個SpringBoot項目(純小白搭建教程)

    本文主要介紹了快速搭建一個SpringBoot項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • JAVA純代碼導(dǎo)出PDF文件實現(xiàn)方式

    JAVA純代碼導(dǎo)出PDF文件實現(xiàn)方式

    本文介紹了作者通過突發(fā)奇想發(fā)布了生成PDF的博客,最初,作者通過將Word文件轉(zhuǎn)換為PDF文件實現(xiàn)導(dǎo)出PDF功能,但效果不盡如人意,后來,作者嘗試直接生成PDF文件,并修復(fù)了生成PDF時出現(xiàn)的小瑕疵,通過導(dǎo)入依賴、下載接口和下載方法的實現(xiàn)
    2025-01-01
  • Java實現(xiàn)XML文件學生通訊錄

    Java實現(xiàn)XML文件學生通訊錄

    這篇文章主要為大家詳細介紹了Java實現(xiàn)XML文件學生通訊錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論

肇州县| 大新县| 竹山县| 大姚县| 忻州市| 九台市| 肃宁县| 车致| 武邑县| 大港区| 桃园市| 南乐县| 利辛县| 安吉县| 甘孜| 苍梧县| 翁源县| 辽宁省| 高密市| 平遥县| 宜宾县| 苍南县| 长顺县| 建始县| 外汇| 金川县| 漳州市| 绥滨县| 万盛区| 安义县| 墨脱县| 三明市| 凤冈县| 汉川市| 高台县| 利津县| 新巴尔虎右旗| 都兰县| 扶沟县| 安宁市| 太保市|