我无法理解它背后的逻辑。
案例1:
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短集:[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]
我只是想了解这背后的主要原因,为什么这两个输出是不同的只是通过从短更改为 int 。场景背后会发生什么。
答案 0 :(得分:8)
问题在于,在第一种情况下,表达式i
的类型为short
,而表达式i - 1
的类型为int
。这些值分别被设置为Short
和Integer
- Integer
不在集合中,因此无法删除。
你可以用演员来解决这个问题:
for (short i = 0; i < 3; i++) {
shortSet.add(i);
shortSet.remove((short) (i - 1));
}
在您的第二个案例中,i
和i - 1
都属于int
类型(然后装箱为Integer
),因此您输入的条目为{ #39;重新添加也可以删除...
答案 1 :(得分:1)
在第一个示例中,您尝试删除Integer,因为i-1表达式被提升为Integer。在你的HashSet中,你只有Shorts,这就是为什么它不会删除任何东西。
从Java 1.5开始,你不应该使用任何集合的原始类型。