我无法理解其背后的逻辑。
案例一:
HashSet shortSet = new HashSet();
for (short i = 0; i < 3; i++) {
shortSet.add(i);
shortSet.remove(i - 1);
}
System.out.println(shortSet.size() + " shortSet : " + shortSet);
操作:大小:3 shortSet:[0, 1, 2]
案例 2:
HashSet shortSet = new HashSet();
for (int i = 0; i < 3; i++) {
shortSet.add(i);
shortSet.remove(i - 1);
}
System.out.println("Size : "+shortSet.size() + " shortSet : " + shortSet);
操作:大小:1 shortSet:[2]
我只是想了解这背后的主要原因,为什么这两个输出不同只需从 short 更改为 int 。幕后发生了什么。
最佳答案
问题在于,在第一种情况下,表达式 i
的类型为 short
,而表达式 i - 1
的类型为整数
。这些值分别装箱到 Short
和 Integer
- Integer
不在集合中,因此无法删除。
你可以通过强制转换来解决这个问题:
for (short i = 0; i < 3; i++) {
shortSet.add(i);
shortSet.remove((short) (i - 1));
}
在您的第二个案例中,i
和i - 1
都是int
类型(然后装箱到Integer
),因此您添加的条目也可以删除...
关于Java HashSet remove(e) 方法不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266975/