Java 中 hashmap 的删除和大小陷阱?

A trap of remove and size of hashmap in Java?

如代码所示: 我不明白为什么在第一个映射中,大小为 100(在 remove() 之后),但在第二个映射中,大小为 1 而不是 2。这是因为存储在 hashmap 中的数据类型不同还是?


public class test {
    public static void main(String[] args) {
        Map<Short, String> map = new HashMap<Short, String>();
        for (short i = 0; i < 100; i++) {
            map.put(i, String.valueOf(i));
            map.remove(i - 1);
        }

        Map<Integer, Integer> hashmap = new HashMap<>();
        hashmap.put(3,4);
        hashmap.put(4,5);
        hashmap.remove(3);
        System.out.println(hashmap.size());
        System.out.println(map.size());

    }
}

帮帮我!

i-1 是一个 int 表达式,即使 i 是一个 short.

这意味着您有效地调用了 map.remove(Integer.valueOf(i - 1))

Integer 对象永远不会等于 Short 对象,即使它们具有相同的值,因此 remove 调用将失败(即不删除任何内容)。

你应该写 map.remove((short) (i-1));.

为什么 map.remove() 甚至接受不是键类型的对象是 a different question