java - HashMap 中的键条目为空字符串或 null

标签 java hashmap

在 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/

相关文章:

java - 无法在其他方法中检索 HashMap 输入

java - 如何在 Java 中将 HashMap 中的键添加到具有相同顺序的列表中

java - 了解 tostring() 方法?

Selenium Webdriver Java 中的 JavascriptExecutor

java - 将 Java LinkedHashMap 转换为 C++ std::map

Java映射,少数按键冲突,解决方法

java - 在 Java 中散列多个键的最佳方法

java - Java浮点和整数之间的双射保持顺序

java - 尝试嵌入 a-href 时出现 JSP 语法错误

java - Weblogic: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z