1.1 Hash介绍
1)构造方法
- 直接定址法:采用线性函数计算hashcode;
- 除留取余法:
- 数字分析法:根据关键字的进制,在每个位的出现频率;
- 平方取中法:取关键字平方的中间几位;
- 折叠法:分隔成位数相同的几部分,然后取这几部分的叠加和。
2)解决冲突的方法
- 线性探查法
- 平方探查法
- 再散列法
- 拉链法
- 建立公共溢出区
1.2 Hashmap的哈希索引求解
index = HashCode(Key) & (Length - 1)
HashCode
是Object
中本身就有的方法,但是没有具体实现。而各个不同的数据类型又继承实现了各自的具体HashCode
算法. 通过与Hashmap的长度相与得到哈希索引index。
为什么hashmap的长度length一定是2的幂?
因为求解哈希索引index的时候需要HashCode与(length-1)相与得到。Hash算法最终得到的index结果,完全取决于Key的Hashcode值的最后几位。 Length采用2的幂可以保证hash结果的均匀分布。若不采用2的幂会导致某些索引永运不会出现。比如与length=5,(101)会导致以11结尾的结果永远不会出现。违反hash均匀分布原则。