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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章成   /  2011-7-16 16:03  /  3502 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合中的hashcode重写,public int hashCode(){return  name.hashCode()^age;},^ 异或符号。这里return的应该是一个对象的hashCode。毕竟比较是否重复,应该是两个对象的比较,像重写的equals(),里面是this.name.equals(stu.name),有个this对象,还有个student  stu对象,hashcode呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 说句实话,我都没太明白你问什么

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-7-16 16:49:10
沙发
我看了你的问题后,感觉你是不是不明白用hashCode来比较对象是否在同一个区域为什么不像equals方法一样是在内部比,也不知道他在哪里才用来比较。
  首先如果我们用来存取对象的集合类是采用哈希存储方式的,那这时从写hashCode方法才有意义,像HashSet,HashTable,HashMap这些就是用hash存储策略的。每当你往这些hash存储策略的集合类里面存或者是取对象的时候会先调用调用对象的hashCode方法确定应该将对象放在哪个地方或者从什么地方去取!如果发现有对象的hashCode跟自己的一样,接着就会调用equal方法来做第2次比较,如果equal相等才是真正的相等。
  在方法里你只要返回一个hashCode就可以了,比较是系统自己来的。你可以参考我的博客心得

评分

参与人数 1技术分 +1 收起 理由
admin + 1 贴上你的博客地址啊

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 10:44:42
藤椅

回复admin

我的意思是比较应该是两个对象的比较,像this.name.equals(stu.name),而hashcode只写的是一个对象的哈希码,没有比的另一个对象
回复 使用道具 举报
黑马网友  发表于 2011-7-17 11:01:56
板凳
今天状态不行,你的问题都理解不完全。就单对hashcode理解一下, hashcode只有类的实例对象要被采用哈希算法惊醒存储和检索时,这个类才需要按要求覆盖hashcode方法。即使程序可能暂时不会用到当前类的hashCode方法,但是为他提供一个hashcode方法也不会又什么不好,没准以后什么时候又用到这个方法,所以,通常要求hashCode方法和equals方法一并同时覆盖。
回复 使用道具 举报
黑马网友  发表于 2011-7-17 11:26:12
报纸

回复 4 # 的帖子

估计是我没说清楚,我的错。admin也说不知道我问的什么,是我的错,我没说清楚。我的意思是,set为了防止重复,会比较两对象是否相同,这时要重写equals与hashcode,比较是否重复,应该至少两对象才谈得上比较,像equals就是两对象比,this与另一个传过来的stu对象,hashcode里return 的只是当前对象的哈希码,所以我才问为什么只有一个对象的?
    这真的是我的错,我说的不清楚
回复 使用道具 举报
bucuo.........
回复 使用道具 举报
恩恩! 支持! 支持!{:2_32:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马