在空键的哈希映射中,索引为0,但对于空字符串,索引是什么。我调试了它,发现它正在第0个索引处创建一个链接列表,并将两个值都存储在那里。那么为什么空字符串值存储在第0个位置,如果它使用空字符串的哈希图计算索引,那么空字符串的哈希代码会是什么。HashMap<String, String> hm= new HashMap<>();
hm.put("", "");
hm.put(null, null);
3 回答
倚天杖
TA贡献1828条经验 获得超3个赞
空字符串的哈希代码将至少在甲骨文的Java 8实现中。0
这是 Java 1.8 中用于计算哈希值的方法的“java.util.HashMap 类”源的摘录:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
这是计算哈希值的相关方法。
因此,从本质上讲,这就是它计算空字符串的哈希代码的方式:
System.out.println(("".hashCode()) ^ ("".hashCode() >>> 16));
无论如何都会的哈希代码。使用该方法查看上面的代码。null0hash
慕婉清6462132
TA贡献1804条经验 获得超2个赞
因为空字符串的哈希代码返回 0,并且它与 null 对象的值相同。所以你有一个哈希的冲突,所以它去了同一个单元格。
*至少对于类String中的当前实现 - 有一天可能会改变
添加回答
举报
0/150
提交
取消