2014-11-06 32 views
-1
Set<Short> set = new HashSet<Short>(); 
short i = 0; 
for (i = 0; i < 100; i++) { 
    set.add(i); 
    set.remove(i-1);    
} 
System.out.println(set.size()); 

当我们运行程序的输出上面谈到100 我的理解是,当我们在一组插入短值,并试图删除整数值。所以它不会从设置中删除。程序输出的解释HashSet的

但是,如果我们修改删除声明如下

set.remove(i);  

输出未来0。任何想法?

+0

同http://stackoverflow.com/questions/13366060/java-different-outputs-when-add-remove-short-and-整数元素在一组 – 2014-11-06 13:29:58

+1

而不是说“输出其他东西”,你可以简单地打印你看到在这些情况下,还有你期望看到什么? – ha9u63ar 2014-11-06 13:30:35

+0

我请求请阅读完整的问题。 – 2014-11-06 13:33:45

回答

0

当您将其从集合中删除时,i-1被视为对象,需要进行类型转换才能从集合中删除正确的值。 set.remove((short)(i - 1))

Set<Short> set = new HashSet<Short>(); 
short i = 0; 
for (i = 0; i < 100; i++) { 
     set.add(i); 
     set.remove((short)(i - 1)); 
} 
System.out.println(set.size());  

试试这个代码它给输出1

+0

我知道如果我们施放到短项目将被从设置中删除。但我的问题是别的。 – 2014-11-06 13:34:46

+1

这只是因为默认情况下1是一个整数而不是一个短,所以如果我是一个短,i - 1是一个int。在第二个片段中,我保持简短,以便将值从集合中删除 – Dici 2014-11-06 13:37:04

+0

谢谢,明白。 – 2014-11-06 13:37:49