如何计算空对象的哈希码



既然HashMap和HashSet允许空对象,那么这些"空"对象的哈希值是多少?在 Java 中如何计算/处理它?

openJDK 中内置的 HashMap 只是将空引用放入数组中用于保存条目的第一个存储桶中

409     private V putForNullKey(V value) {
410         for (Entry<K,V> e = table[0]; e != null; e = e.next) {
411             if (e.key == null) {
412                 V oldValue = e.value;
413                 e.value = value;
414                 e.recordAccess(this);
415                 return oldValue;
416             }
417         }
418         modCount++;
419         addEntry(0, null, value, 0);
420         return null;
421     }

例如,对于HashMap,这只是一种特例。请参阅下面我从 JDK 1.6 中获取的源代码:

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    ...
}
/**
 * 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;
}

相关内容

最新更新