黑马程序员技术交流社区
标题:
求助, 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