HashMap中的NULL键的Hashcode

Pra*_*ant 13 java collections hashmap

我刚刚阅读了Java中HashMap和HashTable类之间的区别.在那里,我发现前者允许空键以及后来不具有相同权限的区别.就HashMap的工作而言,我知道,它在key上调用hashcode方法来查找要放置该键值对的存储区.这是我的问题:如何计算空值的哈希码或是否有空键的哈希码的默认值(如果是这样请指定值)?

rad*_*dai 15

来自HashMap:

public V put(K key, V value) {
   if (key == null)
      return putForNullKey(value);
   ...
Run Code Online (Sandbox Code Playgroud)

如果你看得更远,你会看到null总是转到bin 0


Shi*_*mar 5

从HashMap的源代码中,如果键是以null不同的方式处理它.没有为null生成哈希码,但它在索引0处唯一存储在具有哈希值0的内部数组中.还要注意,空字符串的哈希值也是0(如果键是字符串),但索引在哪里存储在内部数组中确保它们不会混淆.

 /**
 * Offloaded version of put for null keys
 */
private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
        if (e.key == null) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
}
Run Code Online (Sandbox Code Playgroud)