HashMap HashTable ConcurrentMap 中key value是否可以为null

简介: 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

//key为null value为null

HashMap<String,String>hashMap=newHashMap<>();

hashMap.put(null,null);

hashMap.put("zhangsan",null);

System.out.println(hashMap);

//多个key为null

HashMap<String,String>hashMap2=newHashMap<>();

hashMap2.put(null,"111");

hashMap2.put(null,null);

System.out.println(hashMap2);

结论: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

Hashtable<String, String>table=newHashtable<String, String>();

table.put(null,"111");

System.out.println(table);

//value为null

Hashtable<String, String>table2=newHashtable<String, String>();

table2.put("zhangsan",null);

System.out.println(table2);

key为null

value为null

结论 hashtable key value都不能为null

原理

3.ConcurrentMap

ConcurrentMap<String, String>concurrentMap=newConcurrentHashMap<>();

//key为null

concurrentMap.put(null,"111");

System.out.println(concurrentMap);

ConcurrentMap<String, String>concurrentMap2=newConcurrentHashMap<>();

//key为null

concurrentMap2.put("zhangsan",null);

System.out.println(concurrentMap2);

key为null

value为null

原理


目录
相关文章
|
7月前
|
安全 Java
HashMap和Hashtable的区别
HashMap和Hashtable的区别
39 2
|
24天前
|
安全 存储 Java
HashMap和Hashtable区别是什么?
HashMap和Hashtable区别是什么?
17 4
|
1月前
|
存储 C++
为什么HashMap的键值可以为null,而ConcurrentHashMap不行?
为什么HashMap的键值可以为null,而ConcurrentHashMap不行?
29 1
|
1月前
|
PHP
Trying to access array offset on value of type null
你就可以避免在null值上尝试访问数组偏移量的错误。 总的来说,当你遇到这个错误时,你应该回顾你的代码,确保在尝试访问数组偏移量之前,相关的变量已经被正确地初始化为一个数组,并且不是null。
|
1月前
键值的 key 和 value 允许为null吗
键值的 key 和 value 允许为null吗
|
8月前
|
JavaScript API
【Vue】Cannot set reactive property on undefined,null,or primitive value:undefined
【Vue】Cannot set reactive property on undefined,null,or primitive value:undefined
141 0
|
8月前
|
缓存 关系型数据库 MySQL
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
277 0
|
1月前
|
Java
HashMap、HashTable、CurrentHashMap 分析
HashMap、HashTable、CurrentHashMap 分析
36 0
|
8月前
|
Java C++
多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile(二)
多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile
|
8月前
|
存储 安全 Java
多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile(一)
多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile