在 Hashmap 中,对于空键,索引为 0,但对于空字符串,索引是什么。 我调试它,发现它在第 0 个索引处创建一个链表并将两个值存储在那里。
那么为什么空字符串值存储在第 0 个位置,如果使用空字符串的 HashMap 计算索引,那么空字符串的哈希码是什么。
HashMap<String, String> hm= new HashMap<>();
hm.put("", "");
hm.put(null, null);
最佳答案
至少在 Oracle 的 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));
无论如何,null
的哈希码将为 0
。请使用 hash
方法查看上面的代码。
关于java - HashMap 中的键条目为空字符串或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55589901/