今天偶然看到了一道关于java的HashMap的面经题,来分享分享。
题目来源:https://www.nowcoder.com/discuss/363312?type=all&order=time&pos=&page=1&channel=&source_id=1
题目就是写出以下代码的输出:
Map<Short, String> map = new HashMap<>();
for(short i = 0; i <100; i++) {
map.put(i, String.valueOf(i));
map.remove(i-1);
}
System.out.println(map.size());
猜猜输出是什么呢(有一个坑在等着你)
答案是100
我看到这个答案,我还非常怀疑,自己去试了一下,结果还真是。
然后我又试了试以下代码
Map<Short, String> map = new HashMap<>();
for(short i = 0; i <100; i++) {
map.put(i, String.valueOf(i));
map.remove(i);
}
System.out.println(map.size());
输出为0,这个输出和我想象的一样,那前面那个是怎么回事呢?
原来是数据类型的问题。
map.remove(i-1)这个里面的i-1 会转换成Integer类型,而HashMap的key对应的数据类型是short,所以不会删除。
强制类型转换之后,输出和我想象的一样,输出为1。
Map<Short, String> map = new HashMap<>();
for(short i = 0; i <100; i++) {
map.put(i, String.valueOf(i));
map.remove((short)(i-1));
}
System.out.println(map.size());