老师,没看明白这段添加代码是这样解决哈希冲突的

老师,没看明白这段添加代码是这样解决哈希冲突的

http://img1.sycdn.imooc.com//climg/611a3e3a09d5594b14100500.jpg

老师,没看明白这段添加代码是这样解决哈希冲突的

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

我没有特别理解你不明白的具体的点。


如果两个 key 的哈希值是相同的,他们会存储在这个哈希值对应的同一个 TreeMap 中。本质就是这也 ppt 的实现,只不过这页 ppt 展示的 k2 和 k3 之间形成了链表,但我们使用的是 TreeMap:


http://img1.sycdn.imooc.com//climg/611b06ce09cf4d1514881016.jpg


也就是当产生哈希冲突的时候,发生冲突的所有(键值)都会存储起来(而不是被覆盖)。在查询的时候,如果一个哈希值对应多个数据,对于这些数据,都要搜索一遍是否是匹配的。


​如果还不理解,请详细描述一下你具体不理解的点?


继续加油!:)

  • 慕九州3950989 提问者 #1
    public V get(K key){
    return hashtable[hash(key)].get(key);
    }

    如果K2和K3的Key是相同的那get(key)取出来的是哪个值呢?

    2021-08-17 09:56:23
  • liuyubobobo 回复 提问者 慕九州3950989 #2

    K2 和 K3 只有可能是哈希值相同,这是哈希冲突的意思,即 hash[key] 相同。但 K2 和 K3 一定是不同的,即 key 不同。否则他们就是对应同一个数据(同样的身份证号对应的就是你,没有两个人有相同的身份证号)。


    所以,是在 hashtable[hash[key]] 中 取出 key 对应的值。

    2021-08-17 09:59:59
  • 假蛙工程师 回复 提问者 慕九州3950989 #3

    本章开始的时候,介绍了Java语言中的hashcode方法,用于导出对象的一个整型值,即哈希值。同时,也介绍了equals方法,判断一个对象和另一个对象是否相等。这两个办法有密切联系,两者判断是否相等和计算hash值所使用的域(成员变量或者成员属性)通常是相同的,就是为了保证以下性质:

    1. 两个对象相等,则哈希值一定相等。

    2. 哈希值相等,则两个对象不一定相等。

    理解以上内容,这个问题“如果K2和K3的Key是相同的那get(key)取出来的是哪个值呢?”就很好解决了


    无论key == K2还是key == K3

    get(key)都会指向相同的map,然后判断key是等于K2还是等于K3,组后返回相应的value

    2022-01-24 10:39:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2589    人
  • 解答问题       1090    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师