A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qy 黑马帝   /  2011-11-15 10:20  /  3593 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashSet集合存储对象。将对象的引用存储的到集合中
当存储的对象是同一个对象时,也就是对象的引用相同,赋予的哈希值相同
那么HashSet就会只存储一个对象,。
如:
   :Person per1=new Person("黑马");
   :Person per2=new Person("黑马");
      Collection collections=new HashSet();
      collections.add(per1);
      collections.add(per2);
     
问题来了 -->当两个对象相同时(per1和per2),那么集合是存储的第一个对象 还是将第一个对象替换为第二个对象来存储?

12 个回复

正序浏览
你把2个对象的hashCode值打出来看一下 你都知道这是2个不同的对象,怎么会覆盖能,你试试基本类型应该是直接覆盖
回复 使用道具 举报
qy 黑马帝 2011-11-16 04:16:20
12#
  1. 该贴注意。。那么多人都顺着我的帖子往下接,但是 给我的[color=DeepSkyBlue]错误[/color]答案 。差点也让我给误导进去了。还是一个高手私下给我说的,童鞋们!!咱不要为了得分儿神马答案都敢给吧!!
复制代码

评分

参与人数 1技术分 +1 黑马币 +10 收起 理由
wangfayin + 1 + 10 赞一个!

查看全部评分

回复 使用道具 举报
李龙龙 黑马帝 2011-11-16 02:03:07
11#
HashSet就是采用哈希算法存取对象的集合,它内部采用对某个数字n进行取余的方式对哈希码进行 分组和划分对象的存储区域,object类中定义一个hashCode()方法来返回每个java对象的哈希码 当从HashSet集合查找某个对象时,java系统首先调用对象的hashCode方法获取该对象的哈希码 然后根据哈希码找到相应的存储区域,最后取出该存储区域的每一个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。新建对象哈希值不同。当覆盖hashCode和equals方法时会改变object类的hashcode方法。
当一个对象被存储进hashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段否则对象修改后的哈希值与最初存储进h在这种情况下,即使在contains方法之一该对象的当前应用作为的参数去hashSet集合中检索对象,也就返回找不到对象的结果,
这也会导致无法从hashSet集合中单独删除当前对象,从而造成内村泄露ashSet集合中时哈希值就不同了。

评分

参与人数 1技术分 +2 黑马币 +20 收起 理由
wangfayin + 2 + 20 赞一个!

查看全部评分

回复 使用道具 举报
anerror 黑马帝 2011-11-16 01:29:10
10#
{:soso_e141:}表达能力不行。
继续楼上,
比如你是用名字new出来的person对象,这里是两个叫 黑马 的人,一个东村的,一个西村的、
而不是一个 黑马往Set里面装两次。
回复 使用道具 举报
anerror 黑马帝 2011-11-16 01:25:29
9#
{:soso_e136:}
存放的是obj,不是那个字符串。
        Iterator it = cllo.iterator();
        while(it.hasNext()){
                System.out.println(it.next().hashCode());
        }
不同obj的hashCode不一样。
如果你存两次相同的对象,就能看出来了
回复 使用道具 举报
这个谁都没有覆盖谁!是两个变量值相同的不同的对象,就是它们的哈希码不同,所以能够添加到Hashset集合里面!没有谁覆盖谁!

评分

参与人数 1技术分 +1 黑马币 +10 收起 理由
wangfayin + 1 + 10 赞一个!

查看全部评分

回复 使用道具 举报
qy 黑马帝 2011-11-16 00:13:49
7#
大家看 这段代码的运行结果。。并不是一个 。而是存储了两个对象

heima.jpg (459.67 KB, 下载次数: 121)

heima.jpg

评分

参与人数 1技术分 +2 黑马币 +20 收起 理由
wangfayin + 2 + 20 很给力!

查看全部评分

回复 使用道具 举报
qy 黑马帝 2011-11-16 00:08:20
地板
该贴未完。。。。。。。。。
。。。。。。。。。。。。。。
回复 使用道具 举报
qy 黑马帝 2011-11-15 17:37:26
报纸
蒽。。该贴已哦了
回复 使用道具 举报
第一个对象  因为比较的时候  存在相同的  就不会把第2个传进来了
回复 使用道具 举报
依然是第一个,set集合是元素不重复的集合,在存储元素的时候,会先判断是否重复,如果重复则不存,并不是覆盖。
回复 使用道具 举报
如果两个对象相同,第二个对象就不会存进来,还是第一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马