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、参考资料