我們知道HashMap集合是允許存放null值的
hashMap是根據key的hashCode來尋找存放位置的,那當key為null時, 怎么存儲呢?
在put方法里頭,其實第一行就處理了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調用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 ; } |
當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內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/fenglongmiao/article/details/79656198