HashMap HashTable ConcurrentMap 中 key value 是否可以为 null
HashMap HashTable ConcurrentMap 中 key value 是否可以为 null
先说结论
hashmap 的 key,value 都可以为 null;当 key 重复时,第二个 key 的 value 会覆盖第一个 key 的 value
HashTable 它的 key 和 value 都是不能为 null 的
ConcurrentMap 存储数据,它的 key 和 value 都是不能为 null 的
1.HashMap
复制代码
结论:hashmap 的 key,value 都可以为 null;当 key 重复时,第二个 key 的 value 会覆盖第一个 key 的 value
原理
put 方法
get 方法
返回的是 null,此时 null 值不知道是未找到还是对应的 value 值。这就出现了一个问题:当 A 线程使用 containsKey()进行判断时,发现有这个元素,当他调用 get()取这个元素时,B 线程加入了进来,B 线程将这个元素移除掉了,此时 A 线程取得的值为 null,A 线程会以为自己取到了这个值,但实际上此时的 null 是未找到的 null。这样线程间就有可能出现安全问题。
以至于我们在多线程情况下,使用的是 currentHashMap 存储数据,它的 key 和 value 都是不能为 null 的
2.HashTable
复制代码
key 为 null
value 为 null
结论 hashtable key value 都不能为 null
原理
3.ConcurrentMap
复制代码
key 为 null
value 为 null
原理
版权声明: 本文为 InfoQ 作者【javaNice】的原创文章。
原文链接:【http://xie.infoq.cn/article/c105543f278e4ed64fd40c09f】。文章转载请联系作者。
评论