我們知道HashMap集合是允許存放null值的
hashMap是根據(jù)key的hashCode來(lái)尋找存放位置的,那當(dāng)key為null時(shí), 怎么存儲(chǔ)呢?
在put方法里頭,其實(shí)第一行就處理了key=null的情況。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// 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 ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** * 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方法,第二個(gè)判斷就是key為null的判斷后進(jìn)入putForNullKey(V value)這個(gè)方法
可以看到,前面那個(gè)for循環(huán),是在talbe[0]鏈表中查找key為null的元素,如果找到,則將value重新賦值給這個(gè)元素的value,并返回原來(lái)的value。
如果上面for循環(huán)沒(méi)找到則將這個(gè)元素添加到talbe[0]鏈表的表頭。
到此這篇關(guān)于Java中HashMap里面key為null存放到哪 的文章就介紹到這了,更多相關(guān)HashMap key為null內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/fenglongmiao/article/details/79656198