A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hadexs 中级黑马   /  2013-7-3 12:44  /  1551 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

hashCode方法的作用?

6 个回复

倒序浏览
hashcode这个方法是用来鉴定2个对象是否相等的。那你会说,不是还有equals这个方法吗?不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。要从物理上判断2个对象是否相等,用==就可以了。

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

回复 使用道具 举报
1.对于Object类来说,不同的Object对象的hashCode值是不同的(Object类的hashCode值表示的是对象的地址)。
2. 当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。
回复 使用道具 举报
{:soso_e129:}
回复 使用道具 举报
hashCode():Object类定义了一个hashCode()方法来返回每个Java对象的哈希吗
当从HashSet集合众查找某个对象时,Java系统首先调用对象的hashCode()方法来获得该对象的哈希吗。然后根据哈希吗找到相应的存储区域,最后取出该存储区域
内的每个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马