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

原理


目录
相关文章
|
5月前
|
存储 缓存 安全
面试题-HashMap底层原理与HashTable的区别
字节跳动面试题-HashMap底层原理与HashTable的区别
54 0
|
5月前
|
存储 安全 算法
详解Java中HashMap、HashTable、ConcurrentHashMap常见问题
详解Java中HashMap、HashTable、ConcurrentHashMap常见问题
61 0
|
2月前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
2月前
|
API 计算机视觉
Using ‘value‘ pointer is unsafe and deprecated. Use NULL as value pointer. To fetch trackbar value s
本文讨论了OpenCV中使用`createTrackbar`时遇到的"Using ‘value’ pointer is unsafe and deprecated"警告,并提供了通过设置空指针或使用回调函数来解决这个问题的方法。
Using ‘value‘ pointer is unsafe and deprecated. Use NULL as value pointer. To fetch trackbar value s
|
2月前
|
安全 Java
【Java集合类面试十五】、说一说HashMap和HashTable的区别
HashMap和Hashtable的主要区别在于Hashtable是线程安全的,不允许null键和值,而HashMap是非线程安全的,允许null键和值。
|
2月前
解决微软云Azure Function运行报错-Value cannot be null. (Parameter ‘provider‘)
解决微软云Azure Function运行报错-Value cannot be null. (Parameter ‘provider‘)
50 4
|
2月前
|
C++ Python
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
|
2月前
|
JavaScript 前端开发 C++
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
|
2月前
|
存储 安全 Java
Hashtable 和 HashMap 的区别
【8月更文挑战第22天】
75 0
|
3月前
|
存储 Java
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
下一篇
无影云桌面