黑马程序员技术交流社区
标题:
hashCode方法的作用?
[打印本页]
作者:
hadexs
时间:
2013-7-3 12:44
标题:
hashCode方法的作用?
hashCode方法的作用?
作者:
j816326
时间:
2013-7-3 12:48
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个对象是否相等,用==就可以了。
作者:
黄少海
时间:
2013-7-3 13:09
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
作者:
王洪波
时间:
2013-7-3 13:12
1.对于Object类来说,不同的Object对象的hashCode值是不同的(Object类的hashCode值表示的是对象的地址)。
2. 当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。
作者:
万琪
时间:
2013-7-3 15:08
{:soso_e129:}
作者:
亲雨泽
时间:
2013-7-4 00:53
hashCode():Object类定义了一个hashCode()方法来返回每个Java对象的哈希吗
当从HashSet集合众查找某个对象时,Java系统首先调用对象的hashCode()方法来获得该对象的哈希吗。然后根据哈希吗找到相应的存储区域,最后取出该存储区域
内的每个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2