Java中哈希图的删除和大小陷阱?

JIA*_*ONG 1 java hashmap

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


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());

    }
}

Run Code Online (Sandbox Code Playgroud)

帮我!

Joa*_*uer 8

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

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

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

相反,您应该编写map.remove((short) (i-1));.

为什么map.remove()甚至接受不是键类型的对象是一个不同的问题