欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入聊一聊JDK中的Map和Set

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

1. 基礎(chǔ)知識(shí)

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

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

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

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

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

數(shù)學(xué)中的映射其實(shí)就是Java中的Map集合,存儲(chǔ)的都是一個(gè)key對(duì)于一個(gè)value的映射關(guān)系。

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

Collection --> 單個(gè)元素保存的父接口。

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

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

Queue --> 隊(duì)列接口,操作受限的線(xiàn)性表。

Deque --> 雙端隊(duì)列,使用此接口來(lái)表示?;蛘哧?duì)列。

2.模型

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

1. 純 key 模型,比如:

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

2. Key-Value 模型,比如:

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

梁山好漢的江湖綽號(hào):每個(gè)好漢都有自己的江湖綽號(hào)

而Map中存儲(chǔ)的就是key-value的鍵值對(duì),Set中只存儲(chǔ)了Key。

3.Map的使用

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

4.Map接口的使用

常用的兩個(gè)子類(lèi):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 (4) Map集合的遍歷

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

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

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

Map接口在存儲(chǔ)鍵值對(duì)對(duì)象時(shí),內(nèi)部存儲(chǔ)的一個(gè)個(gè)都是Map.Entry對(duì)象。

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

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

其中的每個(gè)元素就是Map的Entry對(duì)象!

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

 5.Set集合的使用

Set (Java Platform SE 8 )

Set與Map主要的不同有兩點(diǎn):Set是繼承自Collection的接口類(lèi),Set中只存儲(chǔ)了Key。

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

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

boolean contains(object o):查詢(xún)當(dāng)前Set集合中是否包含元素o

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • SpringBoot應(yīng)用啟動(dòng)過(guò)程分析

    SpringBoot應(yīng)用啟動(dòng)過(guò)程分析

    這篇文章主要介紹了SpringBoot應(yīng)用啟動(dòng)過(guò)程分析,需要的朋友可以參考下
    2017-08-08
  • SpringBoot使用自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏過(guò)程詳細(xì)解析

    SpringBoot使用自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏過(guò)程詳細(xì)解析

    這篇文章主要介紹了SpringBoot自定義注解之脫敏注解詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mybatis 新增返回id的實(shí)現(xiàn)

    mybatis 新增返回id的實(shí)現(xiàn)

    Mybatis插入數(shù)據(jù)時(shí),可以通過(guò)兩種方式返回生成的ID,兩種方式都需要在實(shí)體類(lèi)中提供userId的getter和setter方法,本文就詳細(xì)的介紹一下這兩種方法,感興趣的可以了解一下
    2024-09-09
  • SpringBoot項(xiàng)目中分頁(yè)插件PageHelper無(wú)效的問(wèn)題及解決方法

    SpringBoot項(xiàng)目中分頁(yè)插件PageHelper無(wú)效的問(wèn)題及解決方法

    這篇文章主要介紹了解決SpringBoot項(xiàng)目中分頁(yè)插件PageHelper無(wú)效的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • JAVA swing布局管理器實(shí)例解析

    JAVA swing布局管理器實(shí)例解析

    這篇文章主要介紹了JAVA swing布局管理器實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談java中的路徑表示

    淺談java中的路徑表示

    下面小編就為大家?guī)?lái)一篇淺談java中的路徑表示。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • SpringBoot自定義路由覆蓋實(shí)現(xiàn)流程詳解

    SpringBoot自定義路由覆蓋實(shí)現(xiàn)流程詳解

    這篇文章主要介紹了SpringBoot自定義路由覆蓋實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • Java 將Word轉(zhuǎn)為HTML的方法

    Java 將Word轉(zhuǎn)為HTML的方法

    本文介紹如何在JAVA程序中將Word文檔通過(guò)Document.saveToFile()方法轉(zhuǎn)換為HTML文檔,導(dǎo)入jar的兩種方法,文中給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2021-10-10
  • Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解

    Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Rxjava功能操作符的使用方法詳解

    Rxjava功能操作符的使用方法詳解

    這篇文章主要介紹了Rxjava功能操作符的使用方法詳解,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11

最新評(píng)論