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

网友投稿 333 2022-11-04


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 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 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。

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:平仄查询API(平仄查询表)
下一篇:asp.net mvc布局页也有Model属性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~