1、什麼是MAP
什麼是Map,字面上就是地圖,通過輸入經維度信息就能夠快速定位地理位置;對於其他領域,Map是一個容器,這個容器記錄了一個鍵、一個值,有一個映射關係將其對應,從而快速的獲取對應鍵值的內容。
2、爲什麼要用Map
2.1 Map的特點
通過上面的定義,可以得出Map的一些特點:
1、一種映射關係關聯了鍵值和實際的存儲結果,能存東西
2、獲取這個結果的時間消耗,最小能到達O(1),能快速取數
2.2 Map的類型
根據不同的映射類型,可以將Map分爲哈希Map、位圖Map、樹Map、鏈式Map,其中後兩者用於排序相關的內容;而根據線程安全和讀寫安全又分爲ConcurrentHashMap與ReadAndWriteMap。
i、HashMap
常見的映射方法:
哈希算法:
參考:https://blog.csdn.net/Beyond_2016/article/details/81286360
https://www.cnblogs.com/endenvor/p/8512211.html
Java 的Map映射方式:
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
在JDK1.8的實現中,優化了高位運算的算法,通過hashCode()的高16位異或低16位實現的:(h = k.hashCode()) ^ (h >>> 16),主要是從速度、功效、質量來考慮的。以上方法得到的int的hash值,然後再通過 h & (table.length -1)
來得到該對象在數據中保存的位置。
參考:http://ju.outofmemory.cn/entry/346983
ii、位圖Map
所謂的位圖Map是將映射關係用比特位表示,KEY本身本身就是Value在位圖的位置,因此key的位置就能表示Value值;這種方式省空間,適合求解算法,查找重複值、搜索,計數用。
參考:https://blog.csdn.net/u013278314/article/details/86078071
https://www.cnblogs.com/li-ning/p/9489974.html
https://www.jianshu.com/p/c4c5a00b40db
iii、樹形Map
樹的類型有哪些?
二叉樹
B樹
B+樹
紅黑樹
各自的特點和差異是什麼?(待分析)
3、常用的JavaMap以及代碼實現原理(待分析)
4、每種Map需要注意的點(待分析)
5、參考資料