前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HashMap HashTable ConcurrentMap 中key value是否可以为null

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

原创
作者头像
javaNice
发布2023-11-22 17:58:22
1420
发布2023-11-22 17:58:22
举报
文章被收录于专栏:javanicejavanice

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

代码语言:java
复制
//key为null value为null
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put(null,null);
hashMap.put("zhangsan",null);
System.out.println(hashMap);

//多个key为null
HashMap<String,String> hashMap2=new HashMap<>();
hashMap2.put(null,"111");
hashMap2.put(null,null);
System.out.println(hashMap2);
image-20230719112516082
image-20230719112516082

结论:hashmap的key,value都可以为null;当key重复时,第二个key的value会覆盖第一个key的value

原理

put方法

image-20230719112657254
image-20230719112657254
image-20230719112735531
image-20230719112735531

get方法

image-20230719112905985
image-20230719112905985

返回的是null,此时null值不知道是未找到还是对应的value值。

这就出现了一个问题:当A线程使用containsKey()进行判断时,发现有这个元素,当他调用get()取这个元素时,B线程加入了进来,B线程将这个元素移除掉了,此时A线程取得的值为null,A线程会以为自己取到了这个值,但实际上此时的null是未找到的null。这样线程间就有可能出现安全问题。

image-20230719113108419
image-20230719113108419

2.HashTable

代码语言:java
复制
//key为null
Hashtable<String, String> table = new Hashtable<String, String>();
table.put(null,"111");
System.out.println(table);

//value为null
Hashtable<String, String> table2 = new Hashtable<String, String>();
table2.put("zhangsan",null);
System.out.println(table2);

key为null

image-20230719113857486
image-20230719113857486

value为null

image-20230719113942278
image-20230719113942278

结论 hashtable key value都不能为null

原理

image-20230719114134543
image-20230719114134543

3.ConcurrentMap

代码语言:java
复制
ConcurrentMap<String, String> concurrentMap = new ConcurrentHashMap<>();
//key为null
concurrentMap.put(null,"111");
System.out.println(concurrentMap);


ConcurrentMap<String, String> concurrentMap2 = new ConcurrentHashMap<>();
//key为null
concurrentMap2.put("zhangsan",null);
System.out.println(concurrentMap2);

key为null

image-20230719120108173
image-20230719120108173

value为null

image-20230719120153336
image-20230719120153336

原理

image-20230719120249144
image-20230719120249144

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HashMap HashTable ConcurrentMap 中key value是否可以为null
    • 1.HashMap
      • 结论:hashmap的key,value都可以为null;当key重复时,第二个key的value会覆盖第一个key的value
      • 原理
    • 2.HashTable
      • 结论 hashtable key value都不能为null
      • 原理
    • 3.ConcurrentMap
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档