继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

hashcode的作用

慕勒551688
关注TA
已关注
手记 250
粉丝 39
获赞 133

    真感觉这篇文章没必要记录,还是写下吧。。。

    首先hashCode()方法被设计在Object类中,说明是希望所有对象都能实现该方法,该方法是会返回一个对应于

当前对象的整数,理论上是需要不同对象的hashCode不相同。之所以所有对象都实现该方法是为了将来对象在查找时变得

快捷。

    Java中的集合类hashMap、hashSet底层的实现都是使用的哈希表,之所以采用哈希表,是因为他能克服链表和二叉树

等数据结构在查询上的效率问题,哈希表的存储就是根据对象的哈希值,确定他的存储位置,试想,假如所有对象的hashCode

都不相同那我们对其操作效率是不是特别高?可以通过他们的哈希值迅速定位他们的存储位置,然后进行相应操作。然而这是

理想状态,仅仅通过hashcode并不能将所有对象区分开来,有可能会出现对象不同,hashcode却相同。为了充分将对象区分开,

Object类中还有一个方法equals(),该方法便是在当对象的hashcode相同时,还要进一步调用该对象的equals方法进行比较。


    通过上面分析可知,hashCode方法和equals()方法往往都是配合使用的,当我们重写了equals方法时,必须要重写hashCode

方法,这是java中的一条规范,原因也很简单,假如此处有A,B两个对象,他们内容相同,当我们在重写equals之前,equals值是

false,因为重写之前equals相当于==,他们的hashCode也不相同,因为为重写前的hashCode值与对象存储位置有关,重写之后equals

返回了true,而此时他们的hashCode值仍然不相同,这明显就不符合逻辑,因为equals相同的对象hashCode值肯定相同,因此重写

equals的同时,有必要重写hashCode(根据自己的需求),总之两者要同时进行。

    通过上面的分析,我们发现hashCode无非就是用来进行确定对象的存储位置,以及对象之间进行比较,都是为哈希表的效率

进行服务的,都是为了查找的快捷。。。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP