除非我在本地声明它,否则项目不会添加到HashSet

时间:2015-09-28 00:04:30

标签: java scope hashset

我有一个HashSet<User>和一个在while循环之外声明的用户,在循环内部我使用setter方法设置名称,然后将用户添加到HashSet add(User) }。

这似乎只是更新 HashSet中的单个用户。只有当我在while循环中声明User时,每次都会向HashSet添加一个新用户。

我认为这是因为如果HashSet add() method收到的内存地址与当前集合中的对象具有相同的内存地址,则它只会更新对象而不会向HashSet添加另一个新对象。它是否正确?

然后在循环中实例化用户将导致它具有不同的内存地址,因此作为新对象添加到HashSet

我可以在这里放置代码,但这是一项作业,我认为我的教授不希望我分享代码。正如你所看到的,我的问题更多的是关于Java语言,而不是关于我的任务。但是,如果每个人都需要查看代码,我会发布一些有用的内容。

1 个答案:

答案 0 :(得分:0)

  

我认为这是因为如果HashSet add()方法接收的对象具有与当前集合中的对象相同的内存地址,则它将仅更新对象而不向HashSet添加另一个新对象。这是对的吗?

这是正确的。根据定义,HashSet将仅允许每个唯一对象中的一个。但是,有关更新对象的部分与其在HashSet中的成员资格无关。由于HashSet仅包含引用,因此您对对象所做的任何更改(在while循环内外)将自动反映在HashSet中。

  

然后在循环中实例化用户将使其具有不同的内存地址

也是如此。对于每个实例,每个对象都有不同的引用。 HashSet将存储一个且仅存储一个。