与set相关的Java面试难题

与set相关的Java面试难题,java,collections,set,Java,Collections,Set,我面临下面的面试问题 下面代码的输出是什么 package com.demo; import java.util.HashSet; import java.util.Set; public class Test { public static void main(String[] args) { Set<Short> set=new HashSet<Short>(); for (short i = 0; i < 10; i++

我面临下面的面试问题

下面代码的输出是什么

package com.demo;

import java.util.HashSet;
import java.util.Set;

public class Test {

    public static void main(String[] args) {
    Set<Short> set=new HashSet<Short>();

        for (short i = 0; i < 10; i++){
            set.add(i);
            set.remove(i-1);
        }

        System.out.println(set.size());
    }
}
package.com.demo;
导入java.util.HashSet;
导入java.util.Set;
公开课考试{
公共静态void main(字符串[]args){
Set=newhashset();
用于(短i=0;i<10;i++){
增加(i);
设置。移除(i-1);
}
System.out.println(set.size());
}
}
它给出的输出是:10

但我不明白为什么它的输出是10

任何人都可以回答我这里发生了什么

谢谢


SItansu

表达式i-1的类型为int,并且自动装箱为整数对象,因此程序将向集合中添加短对象,然后尝试删除整数对象。集合没有整数对象,因此不会删除任何内容

文本值
1
的类型为
int
。因此,值
i-1
的类型为
int
,而不是
i
的类型。因此,将
Short
的装箱实例添加到集合中,但删除
Integer
的装箱实例。因此,
remove()
方法不会删除任何内容,因为
Short
不等于
整数

,也值得注意的是,当remove被定义为接受
Object
类型的参数时,即使对于
Set
,也不会收到类型不匹配的警告或错误。编译器确实很高兴。然而,我的IDE(IntelliJ)足够聪明,可以警告我这个可能的错误。啊,我现在正在使用eclipse,但它对此没有显示任何内容。唉。(不过可能在某个地方有这样的设置……)