Java HashMap中key为null的数据应该存放到哪个位置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计384个文字,预计阅读时间需要2分钟。
我们知道HashMap集合允许存储null值。HashMap是基于key的hashCode来查找存储位置的。当key为null时,HashMap如何存储呢?
在put方法中,首先处理key为null的情况。实际上,在put方法的第一行就处理了key为null的情况。以下是处理key为null的代码示例:
javapublic V put(K key, V value) { if (key==null) { // key为null时,存储到table[0]位置的entry中 return putForNullKey(value); } // 其他key处理逻辑...}
在这段代码中,当key为null时,HashMap会将其存储在table[0]位置的entry中。这样,当再次查找key为null的值时,可以直接从table[0]位置的entry中获取。
我们知道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内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计384个文字,预计阅读时间需要2分钟。
我们知道HashMap集合允许存储null值。HashMap是基于key的hashCode来查找存储位置的。当key为null时,HashMap如何存储呢?
在put方法中,首先处理key为null的情况。实际上,在put方法的第一行就处理了key为null的情况。以下是处理key为null的代码示例:
javapublic V put(K key, V value) { if (key==null) { // key为null时,存储到table[0]位置的entry中 return putForNullKey(value); } // 其他key处理逻辑...}
在这段代码中,当key为null时,HashMap会将其存储在table[0]位置的entry中。这样,当再次查找key为null的值时,可以直接从table[0]位置的entry中获取。
我们知道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内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

