请考虑以下代码:
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
),为什么那是吗?
答案 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
不在集合中,所以它是假的。