黑马程序员技术交流社区

标题: 求助, HashCode值相同时, 内存安排的问题. [打印本页]

作者: 香草芭芙    时间: 2014-10-11 16:53
标题: 求助, HashCode值相同时, 内存安排的问题.
本帖最后由 香草芭芙 于 2014-10-12 00:52 编辑

hashCode值 都是 Demo@3c , 非同一对象, 毕老师说的是 该地址下顺延, 而且两个对象都在同一地址上~ , 不理解这句话的意思, 按理说一个内存地址就一个数值啊, 顺延是 3c+1 的意思吗? 3c+1 地址又不一样了, :dizzy:
作者: 张波    时间: 2014-10-11 17:12
你这描述我实在是看不懂。。。
作者: 香草芭芙    时间: 2014-10-11 17:19
第14天, 177_集合框架(HashSet)_黑马程序员_java基础视频.avi
视频时间:  12:35  ~~13:20
作者: dreamseekerkun    时间: 2014-10-11 17:28
并不是+1,还是 Demo@3c,同一个地址上有两个对象,hashcode相同时,再去比较equals,如果equals相同就不加进来了,请大神再来个详细的表述吧
作者: 香草芭芙    时间: 2014-10-11 17:48
一个内存地址 怎么能存两个对象呢? 我就想问这个
作者: cs8630323    时间: 2014-10-11 19:49
就像两个人同名但是不是一个人,hashCode是程序员自己依照一定算法写的,这个内存地址是后来给加上去的,算法不会那么完美,重复的情况是会有的,只能尽量避免,把重复降到最低。
作者: 香草芭芙    时间: 2014-10-12 00:51
总结:
hashCode 重写之前跟内存地址有关系,
public int hashCode()
        {
                return 1;
        }
重写之后, 和内存地址没关系了, HashSet 先判断 hashCode 是否相同, 然后调用 equals 再比较,
public int hashCode()
        {
                return this.name.hashCode() + this.age * 21;               
        }
这么重写的用意是使hashcode相同的对象, 对象内容也相同, 判断效率提高.
至于HashSet 怎么在内存中存储对象就不得而知了.
作者: 香草芭芙    时间: 2014-10-12 00:53
cs8630323 发表于 2014-10-11 19:49
就像两个人同名但是不是一个人,hashCode是程序员自己依照一定算法写的,这个内存地址是后来给加上去的,算 ...

比喻的好, 谢谢, 启发很大, :)
作者: 九零零    时间: 2014-10-12 12:32
java.lang.Object的hashcode 不是代表 对象所在内存地址;不同的对象在内存中的地址不同,但是他们的hashcode是完全可能相同的。具体的分析这里有http://www.blogjava.net/leochiang/archive/2012/08/01/384546.html。楼主可以看看,其实我也不是太明白,先记着结论吧,等入学以后找老师再问问




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