【问题标题】:Program output explanation HashSet [duplicate]程序输出解释HashSet [重复]
【发布时间】:2014-11-06 13:27:06
【问题描述】:
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。 我明白,当我们在集合中插入短值并尝试删除整数值时。所以它不会从集合中移除。

但是如果我们修改删除语句如下

set.remove(i);    

输出为 0。有什么想法吗?

【问题讨论】:

  • 您可以简单地打印您在这些情况下看到的内容以及您期望看到的内容,而不是说“输出其他内容”吗?
  • 我请求请阅读完整的问题。

标签: java hashset short


【解决方案1】:

当您从集合中删除它时,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。

【讨论】:

  • 我知道如果我们转换为短项目将从集合中删除。但我的问题是另外一回事。
  • 只是因为 1 默认是整数而不是短整数,所以如果 i 是短整数,i - 1 就是整数。在第二个 sn-p 中,i 保持短,因此从集合中删除值
  • 所以如果我修改 set.add(i);设置.add(i+1);将得到编译器错误。
  • 好问题,可能是这样。没时间查了,我先走了。再见
猜你喜欢
  • 2014-09-07
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多