网站首页 > 技术文章 正文
问题3:JDK1.8中HashMap如何计算key的哈希值,具体步骤是什么?
在Java 1.8中,HashMap通过以下步骤计算key的哈希值:
1. 首先调用键对象的hashCode()方法获取一个初始哈希码。每个Java对象都继承自Object类,其中包含了一个默认实现的hashCode()方法。
int hashCode = key.hashCode();
1. 然后,HashMap使用“扰动函数”进一步处理这个哈希码,以减少哈希冲突并提高散列分布的均匀性。扰动函数的具体实现如下:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
在这个函数中:
? 如果键为null,则返回0。
? 否则,首先获取键的哈希码(h = key.hashCode())。
? 再将哈希码右移16位(h >>> 16),这相当于将高低16位进行异或操作。
? 最后,将原始哈希码与右移后的哈希码进行异或运算(^),得到最终的哈希值。
这样处理后的哈希值会更加分散,有利于在数组中均匀分布,从而降低哈希冲突的可能性。
最后,根据计算得出的哈希值和数组长度取模来确定键值对应该存储在数组中的索引位置:
tab[i = (n - 1) & hash]
这里的n是数组长度,hash是经过扰动函数处理过的哈希值。采用位运算符&而不是直接取模的原因是为了保证计算速度,因为数组容量总是2的幂次方,所以可以利用位运算快速找到对应的位置。
猜你喜欢
- 2024-11-04 从原理聊JVM(一):染色标记和垃圾回收算法
- 2024-11-04 一文读懂String类的基本数据类型 strings类型
- 2024-11-04 阿里&北大:深度哈希算法最新综述
- 2024-11-04 数据结构与算法之哈希表 数据结构哈希函数
- 2024-11-04 区块链中两个最重要的数据加密安全技术,非对称加密、哈希计算
- 2024-11-04 如何识别文件的真假 识别文件真实类型最有效的方式
- 2024-11-04 大厂必备技能:数据结构之哈希表 数据结构课程设计哈希表设计
- 2024-11-04 向量数据库-相似性搜索概述 向量相似度算法
- 2024-11-04 两个对象不相等,HashCode 有可能相等吗?
- 2024-11-04 JAVA教程——equals和hashCode java中hashcode的用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)