软件编程
位置:首页>> 软件编程>> java编程>> Java中HashMap里面key为null存放到哪

Java中HashMap里面key为null存放到哪

作者:马丁半只瞄  发布时间:2023-11-10 02:46:47 

标签:HashMap,key,null

我们知道HashMap集合是允许存放null值的

hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢?

在put方法里头,其实第一行就处理了key=null的情况。


// HashMap的put方法
public V put(K key, V value) {
   if (table == EMPTY_TABLE) {
     inflateTable(threshold);
   }
   if (key == null)
      // key为null调用putForNullKey(value)
      return putForNullKey(value);
   int hash = hash(key);
   int i = indexFor(hash, table.length);
   for (Entry<K,V> e = table[i]; e != null; e = e.next) {
     Object k;
     if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
       V oldValue = e.value;
       e.value = value;
       e.recordAccess(this);
       return oldValue;
     }
   }

modCount++;
   addEntry(hash, key, value, i);
   return null;
 }

/**
  * 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;
 }

当HashMap的put方法,第二个判断就是key为null的判断后进入putForNullKey(V value)这个方法

可以看到,前面那个for循环,是在talbe[0]链表中查找key为null的元素,如果找到,则将value重新赋值给这个元素的value,并返回原来的value。

如果上面for循环没找到则将这个元素添加到talbe[0]链表的表头。

来源:https://blog.csdn.net/fenglongmiao/article/details/79656198

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com