Map集合的概述
概述:interface Map<K,V> 其中K是鍵的類(lèi)型,鍵是唯一的,不重復(fù)。V是值的類(lèi)型,是可以重復(fù)。且每個(gè)鍵可以映射最多一個(gè)值。注意的是如果存在兩個(gè)相同的鍵時(shí),則會(huì)將現(xiàn)在的值替換之前的值。
創(chuàng)建方式:以多態(tài)的形式創(chuàng)建對(duì)象。
特點(diǎn):
- 鍵值對(duì)映射關(guān)系
- 一個(gè)鍵對(duì)應(yīng)一個(gè)值
- 鍵不能重復(fù),值可以重復(fù)
- 元素存取無(wú)序
常用方法:
(put(K,V) 將指定的值與該映射中的指定j健相關(guān)聯(lián),用于添加,返回類(lèi)型V);
其中獲取功能:
其中:KeySet()返回為Set類(lèi)型,所以鍵是唯一的,不重復(fù)。
遍歷方式:
第一種:
通過(guò)獲取鍵的集合,再用get方法獲取到對(duì)應(yīng)的值。
第二種:
Map的實(shí)現(xiàn)類(lèi):
HashMap
存儲(chǔ)方式:
采用了 Key-value鍵值對(duì)映射的方式進(jìn)行存儲(chǔ)。
底層結(jié)構(gòu):采用哈希表的存儲(chǔ)結(jié)構(gòu)所以里面的數(shù)據(jù)是無(wú)序但是唯一的。(實(shí)現(xiàn)唯一的方式就是重寫(xiě) Hashcode和equals方法)
TreeMap
底層結(jié)構(gòu):采用的是二叉樹(shù)的存儲(chǔ)方式里面的數(shù)據(jù)是唯一而且有序的而且一般是按升序的方式排列 (要實(shí)現(xiàn)comparable接口并且重寫(xiě)compareTo的方法用來(lái)實(shí)現(xiàn)它的排序)。
集合嵌套(補(bǔ)充知識(shí)):
類(lèi)似這種形式為:
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
為集合嵌套,主要注意的就是:在集合中嵌套集合的類(lèi)型和方法使用。
高頻面試題
1、Map
HashMap: JDK1.8之前HashMap由數(shù)組+鏈表組成的,數(shù)組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長(zhǎng)度大于閾值(默認(rèn)為8)時(shí),將鏈表轉(zhuǎn)化為紅黑樹(shù),以減少搜索時(shí)間。
LinkedHashMap: LinkedHashMap 繼承自 HashMap,所以它的底層仍然是基于拉鏈?zhǔn)缴⒘薪Y(jié)構(gòu)即由數(shù)組和鏈表或紅黑樹(shù)組成。另外,LinkedHashMap 在上面結(jié)構(gòu)的基礎(chǔ)上,增加了一條雙向鏈表,使得上面的結(jié)構(gòu)可以保持鍵值對(duì)的插入順序。同時(shí)通過(guò)對(duì)鏈表進(jìn)行相應(yīng)的操作,實(shí)現(xiàn)了訪(fǎng)問(wèn)順序相關(guān)邏輯。詳細(xì)可以查看:《LinkedHashMap 源碼詳細(xì)分析(JDK1.8)》。
HashTable: 數(shù)組+鏈表組成的,數(shù)組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的。
TreeMap: 紅黑樹(shù)(自平衡的排序二叉樹(shù))。
2、HashMap的底層實(shí)現(xiàn)
JDK1.8 之前 HashMap 由 數(shù)組+鏈表 組成的(“鏈表散列” 即數(shù)組和鏈表的結(jié)合體)。
JDK1.8之后在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長(zhǎng)度大于閾值(默認(rèn)為8)時(shí),將鏈表轉(zhuǎn)化為紅黑樹(shù),以減少搜索時(shí)間,所以有數(shù)組+鏈表+紅黑樹(shù)組成。
到此這篇關(guān)于Java Map集合用法詳解的文章就介紹到這了,更多相關(guān)Java Map集合內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/weixin_46870007/article/details/120874450