黑马程序员技术交流社区

标题: hashCode的应用 [打印本页]

作者: 炉海佳    时间: 2013-4-8 23:24
标题: hashCode的应用
本帖最后由 炉海佳 于 2013-4-9 20:47 编辑

如题,举例说明!最好告诉我视频在哪一天里面有讲解,我没找到相应的视频
作者: 康嘉    时间: 2013-4-8 23:37
hashCode 是Object类中定义的方法,public int hashCode(),返回该对象的哈希码值。在子类没有覆写Object类方法的时候,打印出来的是 其在内存中的地址值. 视频 你找找 关于Object 的那段吧  String类什么的,介绍 API 的内容

比如在 collection 里面,定义一个 HashSet 集合,存在里面的 自定义对象 (new Person(String name,int age)),如果你直接打印对象,返回的是这个对象在内存中的地址.

当你覆写其hashCode方法,就可以比较 是不是存在重复的对象,并可以进行对重复对象的删除或者其他操作啦...

hashCode() 非常重要 ,所以一起好好学习下吧
作者: 王川    时间: 2013-4-9 00:21
张孝祥老师的 基础加强26讲——hashset与hashcode 有简短的提到
作者: 刘林虎    时间: 2013-4-9 00:37
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-4-9 00:43
我这个帖子提到了~~~把我的那个小例子跑一跑~~~

http://bbs.itheima.com/forum.php ... 29&page=1#pid277402
作者: 王大斌    时间: 2013-4-9 01:07
在毕向东讲解hashset那部分
作者: 黄玉昆    时间: 2013-4-9 07:59
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2