码迷,mamicode.com
首页 > 其他好文 > 详细

hashcode的作用

时间:2018-02-01 23:10:56      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:集合   问题   简单   hash   比较   需要   查询   数据   集合类   

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

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

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

快捷。

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

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

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

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

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

倘若此时还是相同,便产生了hash冲突,我们需要额外的操作解决冲突,这样会降低hash表的性能。

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

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

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

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

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

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

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

hashcode的作用

标签:集合   问题   简单   hash   比较   需要   查询   数据   集合类   

原文地址:http://blog.51cto.com/12222886/2067936

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!