1.Map集合的概述
概述:interface Map<K,V> 其中K是鍵的型別,鍵是唯一的,不重復,V是值的型別,是可以重復,且每個鍵可以映射最多一個值,注意的是如果存在兩個相同的鍵時,則會將現在的值替換之前的值,
創建方式:以多型的形式創建物件,
特點:
- 鍵值對映射關系
- 一個鍵對應一個值
- 鍵不能重復,值可以重復
- 元素存取無序
常用方法:

(put(K,V) 將指定的值與該映射中的指定j健相關聯,用于添加,回傳型別V);
其中獲取功能:

其中:KeySet()回傳為Set型別,所以鍵是唯一的,不重復,
遍歷方式:
第一種:

通過獲取鍵的集合,再用get方法獲取到對應的值,
第二種:

Map的實作類:
HashMap
存盤方式:
采用了 Key-value鍵值對映射的方式進行存盤,
底層結構:采用哈希表的存盤結構所以里面的資料是無序但是唯一的,(實作唯一的方式就是重寫 Hashcode和equals方法)
TreeMap
底層結構:采用的是二叉樹的存盤方式里面的資料是唯一而且有序的而且一般是按升序的方式排列 (要實作comparable介面并且重寫compareTo的方法用來實作它的排序),
集合嵌套(補充知識):
類似這種形式為:
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
為集合嵌套,主要注意的就是:在集合中嵌套集合的型別和方法使用,
高頻面試題
1.Map
HashMap: JDK1.8之前HashMap由陣列+鏈表組成的,陣列是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間,
LinkedHashMap: LinkedHashMap 繼承自 HashMap,所以它的底層仍然是基于拉鏈式散列結構即由陣列和鏈表或紅黑樹組成,另外,LinkedHashMap 在上面結構的基礎上,增加了一條雙向鏈表,使得上面的結構可以保持鍵值對的插入順序,同時通過對鏈表進行相應的操作,實作了訪問順序相關邏輯,詳細可以查看:《LinkedHashMap 原始碼詳細分析(JDK1.8)》,
HashTable: 陣列+鏈表組成的,陣列是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的,
TreeMap: 紅黑樹(自平衡的排序二叉樹),
2、HashMap的底層實作
JDK1.8 之前 HashMap 由 陣列+鏈表 組成的(“鏈表散列” 即陣列和鏈表的結合體),
JDK1.8之后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間,所以有陣列+鏈表+紅黑樹組成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330302.html
標籤:java
