黑马程序员技术交流社区

标题: HashSet存储原理??? [打印本页]

作者: 王安琪    时间: 2013-6-7 17:17
标题: HashSet存储原理???
本帖最后由 王安琪 于 2013-6-12 22:09 编辑

如果哈希值相同,还是同一对象,那么是将该相同的对象顺延存储还是不再存入?
这里搞不清楚了???

作者: 夏一站    时间: 2013-6-7 17:22
HashSet在存元素时,会调用对象的hashCode方法计算出存储位置,然后和该位置上所有的元素进行equals比较,
如果该位置没有其他元素或者比较的结果都为false就存进去,否则就不存。
这样的原理注定了元素是按照哈希值来找存储位置,所有无序,而且可以保证无重复元素
我们在往HashSet集合存储元素时,对象应该正确重写Object类的hashCode和equals方法
正因为这样的原理,HashSet集合是非常高效的。
比如,要查找集合中是否包含某个对象,首先计算对象的hashCode,折算出位置号,到该位置上去找就可以了,而不用和所有的元素都比较一遍

作者: 王安琪    时间: 2013-6-7 22:53
本帖最后由 王安琪 于 2013-6-7 22:59 编辑
夏一站 发表于 2013-6-7 17:22
HashSet在存元素时,会调用对象的hashCode方法计算出存储位置,然后和该位置上所有的元素进行equals比较,  ...

那 哈希值相同,又是同一对象就在上一个对象的下面 顺延存储起来 是怎么回事呀???
毕老师的视频 讲的同一个对象顺延存储,就像下图示意的:



作者: 郭天龚    时间: 2013-6-8 16:07
你上面的那位同学说的相当的清楚啊。向HashSet集合中添加一个对象,先要调用这个对象的hashCode()方法(继承自Object类)计算出在集合HashSet中的存储位置,如果这个位置已经存储了对象,那就调用这个对象的equals方法判断这两个对象的成员变量是否相同,相同就不会把这个对象存储进去,不相同就就在已存储的对象下面存储起来。
作者: 袁梦希    时间: 2013-6-12 18:53
王安琪 发表于 2013-6-7 22:53
那 哈希值相同,又是同一对象就在上一个对象的下面 顺延存储起来 是怎么回事呀???
毕老师的视频 讲的同 ...

图很牛
作者: 袁梦希    时间: 2013-6-12 18:53
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃
作者: 王安琪    时间: 2013-6-12 22:09
袁梦希 发表于 2013-6-12 18:53
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃 ...

真有粽子吃呀,,哈哈:lol




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