Java中HashMap里面key為null存放到哪
我們知道HashMap集合是允許存放null值的
hashMap是根據(jù)key的hashCode來尋找存放位置的,那當(dāng)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調(diào)用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; }
當(dāng)HashMap的put方法,第二個判斷就是key為null的判斷后進(jìn)入putForNullKey(V value)這個方法
可以看到,前面那個for循環(huán),是在talbe[0]鏈表中查找key為null的元素,如果找到,則將value重新賦值給這個元素的value,并返回原來的value。
如果上面for循環(huán)沒找到則將這個元素添加到talbe[0]鏈表的表頭。
到此這篇關(guān)于Java中HashMap里面key為null存放到哪 的文章就介紹到這了,更多相關(guān)HashMap key為null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實現(xiàn)定時發(fā)送郵件的三種方法案例詳解
這篇文章主要介紹了SpringBoot三種方法實現(xiàn)定時發(fā)送郵件的案例,Spring框架的定時任務(wù)調(diào)度功能支持配置和注解兩種方式Spring?Boot在Spring框架的基礎(chǔ)上實現(xiàn)了繼承,并對其中基于注解方式的定時任務(wù)實現(xiàn)了非常好的支持,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-03-03在mybatis中使用mapper進(jìn)行if條件判斷
這篇文章主要介紹了在mybatis中使用mapper進(jìn)行if條件判斷,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01