import java.util.HashSet;
import java.util.Set;public class ShortSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Short> s = new HashSet<Short>();
for(Short i=0; i<100; i++){
s.add(i);
s.remove(i-1);
}
System.out.println(s.size());
}
}
这道题的输出是什么?为什么,我判断错了。

解决方案 »

  1.   

    你把s.remove(i-1);改成remove((short)(i-1))试一下。
      

  2.   

    +1,,因为Java中的所有关于Short类型的计算,都会被自动转化为Integer类型,所以你remove(i - 1)意思就是去掉一个Integer类型的数据,但是Set中都是Short类型的,所以不能remove掉。当然了,前面你add的i,其实在循环时,i++,所以也被转成了Integer类型,但是泛型为Short,所以插入的时候,会再被自动转化为Short,所以可以插进去。
      

  3.   

    嗯,为什么删除的时候就变成int类型啦?
      

  4.   

    i++的时候i变成了int了,像2楼说的。
      

  5.   

    试了一下,错误了。是remove(i-1)中的i-1时i变成int型的。可以加System.out.println(i.getClass()); 试一下。
      

  6.   

    我用的jdk是1.6.0_26运行后,发现这个程序没有问题的!
      

  7.   

     System.out.println(s.remove(i-1));
    if this set contains such an element. Returns true if this set contained the element (or equivalently, if this set changed as a result of the call). 
    可以这样测试下
      

  8.   

    被remove的对象要满足e要满足
    (o==null ? e==null : o.equals(e))
    equals比较两个对象你该懂的吧
            Short m=1;
            Integer t=1;
            System.out.println(m.equals(t));