HashMap
在内部如何区分null
和0
作为键。
根据这篇文章,null
键的哈希码是0
。这是正确的吗?如果是的话,两者应该在索引0
的同一桶中,并且HashMap
中应该有一个值,但实际上HashMap
并不是这样工作的。
有人能解释一下吗?HashMap
中null
键的哈希码是多少?
示例代码:
HashMap<Integer,String> map=new HashMap<Integer,String>();
map.put(null, "abc");
map.put(0, "xyz"); // will it override the value for null as key?
System.out.println(map.get(null)); // abc
System.out.println(map.get(0)); // xyz
null
的哈希码为0
或任何其他值并不重要。在哈希映射中,每个哈希码不一定对应一个值。 - JesperhashCode()
返回相同的值,它会检查equals()
吗?如果是,那么在这种情况下它将如何工作? - Brajnull
当然会被特殊处理,以避免发生NullPointerException
。如果您真的想了解所有实现细节,请查找您JDK安装目录中的src.zip
中可以找到的HashMap
源代码。 - JesperHashMap
以特殊的方式处理null
。 - Braj