java架构师培训:hash的作用

69 篇文章 0 订阅
2 篇文章 0 订阅

一个结构和hash之间有什么关系呢?
  实际上,不难猜测,让我们考虑一个场景。假设我们已经有一个哈希表,现在需要存储新数据。上图中数组的长度为6,这意味着有6个链接列表可供选择,那么我们应该将这个新元素放入哪个链接列表中?
  hash的作用

您可能会说,它当然放在了最短的一个中,以便可以平衡链表的长度。这真的很好,但是有一个问题。尽管存储起来很方便,但是在阅读时存在很大的问题。因为我们在存储链接列表时知道它存在于最短的链接列表中,但是当我们读取它时,我们并不知道哪个链接列表最短,因此很可能已完全更改了整个结构。因此,我们不能基于这样的动态量来确定节点的放置,而必须基于静态量。
  该静态数量是hash值。我们都知道哈希算法的本质是执行映射操作,以将任意结构的值映射到整数。我们理想的情况是不同的值映射结果不同,并且相同的值映射结果相同。换句话说,变量和整数之间存在一一对应的关系。但是因为我们的整数数量有限,并且变量的值是无限的,所以必须有一些变量,尽管它们不相等,但映射后的结果是相同的。这种情况称为hash冲突。
  在hashmap当中我们并不需要理会hash碰撞,因为我们并不追求不同的key能够映射到不同的值。因为我们只是要用这个hash值来决定这个节点应该存放在哪一条链表当中。只要hash函数确定了,只要值不变,计算得到的hash值也不会变。所以我们查询的时候也可以遵循这个逻辑,找到key对应的hash值以及对应的链表。
  在Python当中由于系统提供了hash函数,所以整个过程变得更加方便。我们只需要两行代码就可以找到key对应的链表。
  hash_key=hash(key)%len(self.headers)linked_list=self.headers[hash_key]
  推荐阅读:jvm培训:如何判断哪些对象需要回收?
  如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1160405674,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值