晚能 发表于 2025-9-25 19:39:58

Java集合--从本质出发理解HashMap

文章内容较长,放宽心,带着疑问慢慢读,总能找到你想要的答案。
如何快速定位数据存储在内存地址的位置?

先提出一个问题:如何快速定位数据存储在内存地址的位置?
聪明的你会想到使用数组:根据首地址+单个节点存储大小 x 数组下标,便可快速计算出目标的内存地址,从而做到时间复杂度为O(1)的查找速度。但这一切都建立在物理存储空间连续的情况。
如果物理存储空间不连续?如何实现y=f(x),根据x参数,通过f(x)函数,快速计算出y 目标地址呢?
在HashMap中,x参数就是key,这一切的计算都是围绕key进行展开的,这些计算可以简述为以下三行代码
int hashCode = key.hashCode();
int hash = hashCode ^ (hashCode >>> 16);
int index = (arrLen - 1) & hasharrLen变量为数组长度,你可以把这三行代码理解为f(x),而参数x=key,计算结果为y=index,计算结果的index便是映射数组的下标。这个映射定位函数是多对一的函数,不同的key会得到相同的数组下标值。
在 HashMap 中,f(key) = hash(key) & (arrLen - 1) 就是一个哈希映射数组索引函数,不同的 key 可能映射到相同的数组索引,被称为映射冲突或桶冲突,但是常常被称为哈希冲突,这称呼经常让人摸不着头脑,因为它的表述并不准确。
哈希冲突和映射冲突的关系

[*]哈希函数hash(key)内部产生相同值 → 叫「哈希冲突」
[*]不同哈希值映射到同一个桶 → 叫「索引冲突」或「映射冲突」


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

咚獭 发表于 2025-10-25 00:55:46

东西不错很实用谢谢分享

喳谍 发表于 2025-12-13 06:02:05

感谢分享,学习下。

艾晓梅 发表于 2025-12-13 22:28:56

分享、互助 让互联网精神温暖你我

松菊 发表于 2026-1-18 02:13:09

过来提前占个楼

赶塑坠 发表于 2026-1-20 15:14:48

鼓励转贴优秀软件安全工具和文档!

阎怀慕 发表于 2026-1-21 16:08:05

用心讨论,共获提升!

醋辛 发表于 2026-1-21 17:48:45

前排留名,哈哈哈

后仲舒 发表于 2026-1-21 17:50:32

新版吗?好像是停更了吧。

郦珠雨 发表于 2026-1-23 02:02:12

感谢分享,下载保存了,貌似很强大

吮槌圯 发表于 2026-1-24 10:33:53

前排留名,哈哈哈

创蟀征 发表于 2026-1-25 11:42:34

分享、互助 让互联网精神温暖你我

挺喽蹂 发表于 2026-1-26 08:11:08

不错,里面软件多更新就更好了

劳欣笑 发表于 2026-1-27 04:30:22

不错,里面软件多更新就更好了

艺轫 发表于 2026-1-27 05:55:36

很好很强大我过来先占个楼 待编辑

褥师此 发表于 2026-1-29 03:54:30

分享、互助 让互联网精神温暖你我

翳舀 发表于 2026-2-6 06:34:21

yyds。多谢分享

阜逐忍 发表于 2026-2-6 13:10:15

这个有用。

骆贵 发表于 2026-2-8 08:24:47

这个有用。

轩辕娅童 发表于 2026-2-8 13:45:26

感谢分享,学习下。
页: [1] 2
查看完整版本: Java集合--从本质出发理解HashMap