黑马程序员技术交流社区

标题: 集合中的hashcode()? [打印本页]

作者: 章成    时间: 2011-7-16 16:03
标题: 集合中的hashcode()?
集合中的hashcode重写,public int hashCode(){return  name.hashCode()^age;},^ 异或符号。这里return的应该是一个对象的hashCode。毕竟比较是否重复,应该是两个对象的比较,像重写的equals(),里面是this.name.equals(stu.name),有个this对象,还有个student  stu对象,hashcode呢?
作者: 匿名    时间: 2011-7-16 16:49
我看了你的问题后,感觉你是不是不明白用hashCode来比较对象是否在同一个区域为什么不像equals方法一样是在内部比,也不知道他在哪里才用来比较。
  首先如果我们用来存取对象的集合类是采用哈希存储方式的,那这时从写hashCode方法才有意义,像HashSet,HashTable,HashMap这些就是用hash存储策略的。每当你往这些hash存储策略的集合类里面存或者是取对象的时候会先调用调用对象的hashCode方法确定应该将对象放在哪个地方或者从什么地方去取!如果发现有对象的hashCode跟自己的一样,接着就会调用equal方法来做第2次比较,如果equal相等才是真正的相等。
  在方法里你只要返回一个hashCode就可以了,比较是系统自己来的。你可以参考我的博客心得
作者: 匿名    时间: 2011-7-17 10:44
标题: 回复admin
我的意思是比较应该是两个对象的比较,像this.name.equals(stu.name),而hashcode只写的是一个对象的哈希码,没有比的另一个对象
作者: 匿名    时间: 2011-7-17 11:01
今天状态不行,你的问题都理解不完全。就单对hashcode理解一下, hashcode只有类的实例对象要被采用哈希算法惊醒存储和检索时,这个类才需要按要求覆盖hashcode方法。即使程序可能暂时不会用到当前类的hashCode方法,但是为他提供一个hashcode方法也不会又什么不好,没准以后什么时候又用到这个方法,所以,通常要求hashCode方法和equals方法一并同时覆盖。
作者: 匿名    时间: 2011-7-17 11:26
标题: 回复 4 # 的帖子
估计是我没说清楚,我的错。admin也说不知道我问的什么,是我的错,我没说清楚。我的意思是,set为了防止重复,会比较两对象是否相同,这时要重写equals与hashcode,比较是否重复,应该至少两对象才谈得上比较,像equals就是两对象比,this与另一个传过来的stu对象,hashcode里return 的只是当前对象的哈希码,所以我才问为什么只有一个对象的?
    这真的是我的错,我说的不清楚
作者: 徐传任    时间: 2012-9-16 17:24
bucuo.........
作者: 小白马__^o^    时间: 2014-8-2 17:14
恩恩! 支持! 支持!{:2_32:}




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