Java Map集合用法詳解
Map集合的概述
概述:interface Map<K,V> 其中K是鍵的類型,鍵是唯一的,不重復(fù)。V是值的類型,是可以重復(fù)。且每個(gè)鍵可以映射最多一個(gè)值。注意的是如果存在兩個(gè)相同的鍵時(shí),則會(huì)將現(xiàn)在的值替換之前的值。
創(chuàng)建方式:以多態(tài)的形式創(chuàng)建對象。
特點(diǎn):
- 鍵值對映射關(guān)系
- 一個(gè)鍵對應(yīng)一個(gè)值
- 鍵不能重復(fù),值可以重復(fù)
- 元素存取無序
常用方法:

(put(K,V) 將指定的值與該映射中的指定j健相關(guān)聯(lián),用于添加,返回類型V);
其中獲取功能:

其中:KeySet()返回為Set類型,所以鍵是唯一的,不重復(fù)。
遍歷方式:
第一種:

通過獲取鍵的集合,再用get方法獲取到對應(yīng)的值。
第二種:

Map的實(shí)現(xiàn)類:
HashMap
存儲(chǔ)方式:
采用了 Key-value鍵值對映射的方式進(jìn)行存儲(chǔ)。
底層結(jié)構(gòu):采用哈希表的存儲(chǔ)結(jié)構(gòu)所以里面的數(shù)據(jù)是無序但是唯一的。(實(shí)現(xiàn)唯一的方式就是重寫 Hashcode和equals方法)
TreeMap
底層結(jié)構(gòu):采用的是二叉樹的存儲(chǔ)方式里面的數(shù)據(jù)是唯一而且有序的而且一般是按升序的方式排列 (要實(shí)現(xiàn)comparable接口并且重寫compareTo的方法用來實(shí)現(xiàn)它的排序)。
集合嵌套(補(bǔ)充知識(shí)):
類似這種形式為:
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
為集合嵌套,主要注意的就是:在集合中嵌套集合的類型和方法使用。
高頻面試題
1、Map
HashMap: JDK1.8之前HashMap由數(shù)組+鏈表組成的,數(shù)組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長度大于閾值(默認(rèn)為8)時(shí),將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時(shí)間。
LinkedHashMap: LinkedHashMap 繼承自 HashMap,所以它的底層仍然是基于拉鏈?zhǔn)缴⒘薪Y(jié)構(gòu)即由數(shù)組和鏈表或紅黑樹組成。另外,LinkedHashMap 在上面結(jié)構(gòu)的基礎(chǔ)上,增加了一條雙向鏈表,使得上面的結(jié)構(gòu)可以保持鍵值對的插入順序。同時(shí)通過對鏈表進(jìn)行相應(yīng)的操作,實(shí)現(xiàn)了訪問順序相關(guān)邏輯。詳細(xì)可以查看:《LinkedHashMap 源碼詳細(xì)分析(JDK1.8)》。
HashTable: 數(shù)組+鏈表組成的,數(shù)組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的。
TreeMap: 紅黑樹(自平衡的排序二叉樹)。
2、HashMap的底層實(shí)現(xiàn)
JDK1.8 之前 HashMap 由 數(shù)組+鏈表 組成的(“鏈表散列” 即數(shù)組和鏈表的結(jié)合體)。
JDK1.8之后在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長度大于閾值(默認(rèn)為8)時(shí),將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時(shí)間,所以有數(shù)組+鏈表+紅黑樹組成。
到此這篇關(guān)于Java Map集合用法詳解的文章就介紹到這了,更多相關(guān)Java Map集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java function函數(shù)式接口的使用方法與實(shí)例
這篇文章主要介紹了Java function函數(shù)式接口的使用方法與實(shí)例,函數(shù)式接口如一支未完成的詩篇,用Lambda表達(dá)式作韻腳,將代碼的機(jī)械美感與藝術(shù)的抽象融為一體,悄然重構(gòu)了開發(fā)者對代碼之美的認(rèn)知,需要的朋友可以參考下2025-02-02
Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法
通過Java程序展示如何來實(shí)現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07
maven <repositories>標(biāo)簽和<pluginRepositories>標(biāo)簽的使用
這篇文章主要介紹了maven <repositories>標(biāo)簽和<pluginRepositories>標(biāo)簽的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
大模型chat/completions和completions區(qū)別解析
OpenAI的completions和chat/completions是兩個(gè)不同的端點(diǎn),completions用于單次文本補(bǔ)全,而chat/completions用于多輪對話生成,選擇哪個(gè)端點(diǎn)取決于你的具體需求,本文介紹大模型chat/completions和completions區(qū)別,感興趣的朋友一起看看吧2025-03-03
IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法
本文主要介紹了IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法, maven結(jié)構(gòu)的項(xiàng)目,我們在每次修改代碼后都會(huì)需要手動(dòng)編譯,本文就可以解決這個(gè)問題,感興趣的可以了解一下2023-08-08
spring.mvc.servlet.load-on-startup屬性方法源碼解讀
這篇文章主要介紹了spring.mvc.servlet.load-on-startup的屬性方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12

