JDK源码阅读之HashMap -- hash值计算方式、下标查找及tableSizeFor方法
来源:互联网 发布:java教程pdf完整版 编辑:程序博客网 时间:2024/06/06 02:54
1. HashMap中的hash计算方式(为什么)
减少hash是的碰撞
2. 下表查找(和hash值的关系)
hashcode ^ (hashcode >>> 16),让低16位同时包含了高位和低位的信息,在计算下标时,由于高位和低位的同时参与,减少hash的碰撞。
(n - 1) & hashCode:n - 1 使得低位全为1,高位全为0,位与之后的结果一定在0 ---> n-1范围内
发展过程:
1. put到HashMap中的Object,我们视为它合理的实现了hashCode方法,该方法可以达到良好的散列效果,即碰很少重复
2. 既然hashCode合理,我们就可以考虑用它来散列(分桶)对象
3. 由于需要将对象散列到一定编号范围的捅中(0 -- n),由于n(表大小)是2的整数次方,可以采用n-1和hashcode按位与,得到的结果是在桶范围内,上述我们是hashCode为散列良好的,所以(n -1)&hashCode的计算结果可视为应该分布均匀的。
4. 上述有一个问题,(n -1)&hashCode的计算方式中,假设n=16,那么hashCode其实只有低4位参与了计算,为了进一步降低碰撞的发生,hashCode的计算方式改为了hashcode ^ (hashcode >>> 16),使得低位中同时包含了低位和高位的信息。
时间问题,暂随意记录,待稍后完善...
0 0
- JDK源码阅读之HashMap -- hash值计算方式、下标查找及tableSizeFor方法
- HashMap方法hash()、tableSizeFor()
- HashMap源码注解 之 静态工具方法hash()、tableSizeFor()(四)
- JDK源码阅读之 HashMap
- JDK源码阅读之HashMap的实现
- JDK源码阅读之HashMap类
- hashmap hash后得出下标的方法
- JDK 源码中 HashMap 的 hash 方法原理
- HashMap源码之hash()函数分析(JDK 1.8)
- JDK源码阅读笔记之——HashMap
- JDK源码之-HashMap
- HashMap源码阅读(1)- 初始值、数据结构、hash计算、2的n次幂
- JDK源码阅读——模拟HashMap
- JDK 1.8 HashMap 源码阅读一
- JDK 1.8 HashMap 源码阅读二
- JDK源码阅读:实现自己的HashMap
- jdk 1.8 hashmap resize 源码阅读
- Java源码阅读之HashMap
- 跟小博老师一起学习数据库 ——H2内存数据库
- 子程序执行return语句,之后未执行的语句将不再执行
- JSP 生命周期
- POJ 2299 Ultra QuickSort <树状数组+离散化 / 归并排序>
- HDU
- JDK源码阅读之HashMap -- hash值计算方式、下标查找及tableSizeFor方法
- python解leetcode——13.Roman to Integer (罗马数字转为整数)
- 如何制作图标字体
- 如何获取文件的绝对路径
- PAT-A-1015. Reversible Primes (20)
- [Python源码解析]机器学习-决策树
- QT中定时器的使用方法
- F
- iOS GPUImage研究序三:GPUImageMovie简介