将Integer对象添加到hashSet

时间:2012-09-02 13:52:51

标签: java set hashset

请考虑以下代码:

6.  Set<Integer> set = new HashSet<Integer>();
7.  Integer i1 = 45;
8.  Integer i2 = 46;
9.  set.add(i1);
10. set.add(i1);
11. set.add(i2); System.out.print(set.size() + " ");
12. set.remove(i1); System.out.print(set.size() + " ");
13. i2 = 47;
14. set.remove(i2); System.out.print(set.size() + " ");
15. System.out.println(set.contains(i2));

代码输出:

2 1 1 false

在第14行之后我假设大小为0,但它是1。我想在第13行添加了一个新对象i2,所以我在第15行测试了它,但它返回false(即集合中不存在i2),为什么那是吗?

3 个答案:

答案 0 :(得分:6)

你永远不会从第14行的集合中删除任何内容,因为你将前一行的i2重新分配给不在集合中的不同内容。尝试看看完全删除第13行后会发生什么。

P.S。集合的remove方法实际上返回一个布尔值,因此您可以使用System.out.println(set.remove(i2))查看是否真的删除了i2

答案 1 :(得分:2)

[45,46] - &GT; Remove 45 - &gt; [46] - &gt; Remove 47 - &gt; [46]因为47不存在。此外,当您为自动装箱分配i2时,参考已更改,但散列集仍包含旧值。

答案 2 :(得分:2)

1。 A套件会在其中维护数据的唯一性

添加其中的所有数据后set

[46, 45]

查看此跟踪...

[46,45]

set.remove(i1)

[46]

i2 = 47;
set.remove(i2);

[46] // as i2 = 47, but you didn't add it to the set

所以现在i2 = 47 不在集合中,所以它是假的。