Eme*_*ald 5 java puzzle short hashset
运行此代码:
public class SomeSet {
public static void main(String[] args) {
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());
}
}
Run Code Online (Sandbox Code Playgroud)
将打印值100.
为什么打印这个值?
Mic*_*rdt 10
s.remove(i - 1);
Run Code Online (Sandbox Code Playgroud)
上面的行将尝试Integer从集合中删除对象,因为Java中的所有整数计算都有int(或long)结果.由于集合包含Short对象,因此该remove()方法不会产生任何影响.
这(以及类似的问题)是你几乎从不使用short(以及更多)的主要原因Short.使用Set包含自动编码的数字的实现会产生大量(容易1000%)的开销,因此尝试通过使用Short而不是使用来节省空间是没有意义的Integer.
问题是用一个对象remove(i-1)调用该remove方法Integer,因为i-1它是类型int(它被自动装入一个Integer).
要确保使用对象调用remove,请Short使用以下命令:
s.remove((short) (i - 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |