欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > concurrentHasMap为什么不允许kv为null

concurrentHasMap为什么不允许kv为null

2025/2/5 12:35:26 来源:https://blog.csdn.net/yxg520s/article/details/145438873  浏览:    关键词:concurrentHasMap为什么不允许kv为null

1 concurrentHasMap为什么不允许kv为null

当 null 被允许作为键时,可能会引发一些歧义。在多线程环境下,查询某个键的值时,如果该键不存在,它通常返回 null。但如果允许 null 作为键,那么你无法区分:

键不存在:返回 null

键存在且值为 null:返回 null

2 在hashMap的区分方法:

使用 containsKey(key) 方法 containsKey(key) 方法用于检查 Map 中是否存在给定的键。如果返回 true,则表示该键存在,否则表示该键不存在。因此,可以通过 containsKey 来区分是键不存在还是键存在但值为 null。

3 为什么concurrentHashMap不能通过containsKey判断1中的两种情况?

3.1 如果 ConcurrentHashMap 允许存放 null 值

ConcurrentHashMap 是线程安全的容器,如果 ConcurrentHashMap 允许存放 null 值,那么当一个线程调用 get(key) 方法时,返回 null 可能有两种情况:
(1) 一种是这个 key 不存在于 map 中
(2) 另一种是这个 key 存在于 map 中,但是它的值为 null。
这样就会导致线程无法判断这个 null 是什么意思。
在非并发的场景下,可以通过 map.containsKey(key)检查是否包括该 key,从而断定是不存在 key 还是存在key 但值为 null,但是在并发场景下,判断后调用其他 api 之间 map 的数据已经发生了变化,无法保证对同一个 key 操作的一致性。

3.2 如果ConcurrentHashMap不允许存放 null 值和null键

在并发情况下,因为不允许将value置为null,只能remove,那么get(key)只要返回null就一定说明这个键不存在,而不是“键存在但value为null”。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com