有关Set集合的一个小问题

时间:2023-03-09 18:08:11
有关Set集合的一个小问题

先看两段代码:

    Demo1:

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

Demo2:

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

可以尝试先思考这两段代码的输出结果。

  答案是:Demo1输出,Demo2输出.

  因为这里存在一个(i-1),自动将short类型转化为int类型,

再看看Set集合的add(),remove()方法

boolean add(E e);

boolean remove(Object o);

也就是说Set集合的存放的是Object类型,会自动将short,int数值自动装箱为Short,Integer的对象

Short,Integer不是同一种Object,自然Demo1里面的值remove不了,而Demo2会remove至只剩一个Object对象

如结果所示。

下面再以一段代码证:

  

 Set<Short>s=new HashSet<>();
short i=1;
s.add(i);
int j=1;
s.remove(j);
System.out.println(i==j);
System.out.println(s);

输出结果:true  [1]
    也证实了这点:基本类型下虽然可以自动转换,但是对Set集合中来说,进行自动装箱后Object是完全不同的,自然remove不了