Hashcode的理解和作用

开始之前想聊点题外话,叨叨几句

很早就想让孩子接触代码,也试着和孩子一起学习,但对于字母表都认不全的4、5岁小朋友来说有点难,所以最近一直想把程序员的一些逻辑思想灌输给5岁的女儿,我一直感觉程序员思维来源于生活中的种种技巧,孩子了解这些对于做事情思考问题都是有帮助的。想着今晚怎么给孩子讲讲hashcode~~~~

先来说说车票这件事,为什么要有车票呢,没有它会怎么样?
如果没有火车票,随意一节车箱上车了,如果车上人很多都已快坐满了,想找个空位置,就得一节节车箱去找空坐,很累啊。有车票就不同了,我们有目地的上了车,3箱15号,这个数字对应我们的位置,每个人都有对应自己的地址去上车,省去了费时费力的查找空坐了。这就是车票的好处之一。
hashCode和这段叨叨的关联就是可以理解成它就是对应到车票上的车箱,所以hashCode和equals要同时重写,定位到车箱后还需要比较下这个车箱里有没有重座的~

什么是Hashcode

hashcode是两个词组合的,hash & code,散列码,引用其它文章的解释方式,我们要从hash来入手理解,百度了下hash如下所示先了解一下:

在这里插入图片描述

看上去就是把anyting转成了个固定长度的消息摘要,那hashCode是啥呢,即是根据hash函数得到的那个消息摘要,就为hashCode,比如说大学时印象比较深的是通过直接取余算法,有一个对象A,A的物理地址转换为一个整数17(这是假如),17%8=1,那么A的hashcode就为1

Hashcode的实际应用

以下内容非原创,来源于程序员小灰,公众员:Java专栏

java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。当我们在set中 插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样的方法 就会比较满。
于是有人发明了哈希算法来提高集合中查找元素的效率。 这种方式将集合分成若干个存储区域,每个对 象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就 可以确定该对象应该存储的那个区域。 
 hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合 要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。 如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上 已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地 址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值