Java中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]鏈表的表頭。
到此這篇關於Java中HashMap裡面key為null存放到哪 的文章就介紹到這瞭,更多相關HashMap key為null內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- HashMap在JDK7與JDK8中的實現過程解析
- Java1.7全網最深入HashMap源碼解析
- Java 中 hashCode() 與 equals() 的關系(面試)
- Java京東面試題之為什麼HashMap線程不安全
- 解析HashMap中的put方法執行流程