张三家的羊圈之HashCode

先讲个故事

​ 张三家里有20个羊圈,从0-19编号,1000只羊,每只羊都有一个独特的编号,它们各自生活在自己挑选的羊圈里,生活惬意。有一天,有客人感觉114号羊听起来就身姿妙曼,想找114号羊聊聊烤全羊的制作要领,让张三去找出来。张三从0号羊圈一路找到19号,挨个的看羊的编号找到太阳落下,月亮升起,终于在19号羊圈里找到了114号羊,张三累的精疲力竭。

​ 后续肯定还会再来新的客人,每次找羊都这么费精力张三可受不了,于是张三想了个办法,将每只羊按照它的编号对20取模的结果来给羊分配羊圈,这样,要找羊的时候,就可以按照编号来锁定羊圈,每次只用找一个羊圈就可以了,现在张三可以愉快的找某只羊聊天了。

1、什么是hashcode

​ 上文中我们提到,张三家的每只羊都有一个独特的编号,那在Java中,我们如何给定一个对象一个独特的编号呢?每个对象独一无二的,我们很轻易的就想到了对象的地址,我们将物理地址转换为一个整数,然后通过hash函数(在上文中即对20取模,可以是更复杂的函数,不唯一)的运算,就得到了我们的hashcode(所分配羊圈的羊圈编号)。

​ 现在我们可以知道,一个对象的hashcode就是我们通过这个对象的独一无二的标识(一般为物理地址)转化为整数,然后通过hash函数运算得到的值。

2、hashcode的作用

​ 那hashcode有什么作用呢?从故事中我们知道,通过这样一个运算,张三找到某只羊的难度大大降低了,这就体现了hashcode的快捷查找的作用。对应到计算机中,我们通过一个对象的hashcode,就可以在hash表(在上文中即对羊圈的0-19编号总体组成的表)中找到对应的位置,然后存入对象或者找到对象了。

​ 可能有人还是觉得1000只羊分配到20个羊圈,每个羊圈中还是有不少羊,找起来也没有很方便。那如果我们建立足够多的羊圈呢?如果我们建1000个羊圈,在每个羊圈中的找寻,是不是就十分轻松了。增加羊圈的成本很高,但计算机中我们增加hash表位置的成本就相对小很多了。只要我们根据对象数量来建立相应规模大小的hash表,查找就会变得十分方便了。

水平有限,内容存在问题欢迎随时指正,感激不尽。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值