黑马程序员技术交流社区

标题: hashcode的问题 [打印本页]

作者: 方志亮    时间: 2012-9-12 11:18
标题: hashcode的问题
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
求详细的解释
作者: 张 涛    时间: 2012-9-12 11:29
一、要知道,涉及到hash算法的,重写equals方法,必须重写hashcode方法;否则,equals即使等了,hashcode不等,他们也不会相等。
二、但没有涉及到hash算法的,可以不考虑hashCode方法,就能判断他们是否相等。
三、“两个对象值相同(x.equals(y) == true),但却可有不同的hash code”这句话,问的是“可以有吗?”可以,是因为没有涉及到hash算法;不可以,是因为不能保证这两个对象没有涉及到hash算法。

方兄,我认为这个答出知识点就可以了,这个题问的有歧义啊。有歧义的面试题也正常,不管回答什么,答出知识点就行了。
作者: 方志亮    时间: 2012-9-12 11:51
张 涛 发表于 2012-9-12 11:29
一、要知道,涉及到hash算法的,重写equals方法,必须重写hashcode方法;否则,equals即使等了,hashcode不 ...

好的  谢谢了
作者: 李菁    时间: 2012-9-12 17:21
要想hashCode有价值,对象必须存在HashSet集合中。
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中那些参与计算哈希值的字段了,
否则对象修改后的哈希值与最初存储进HashSet集合中时的值就不同了,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。

作者: 张忠豹    时间: 2012-9-12 23:25
对。
如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。
如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的





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