我已阅读了很多文章但无法理解并发哈希映射不允许空键或空值的原因。 一些文章给出了这样的解释:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
由于m
是并发映射,因此可以在k
和containsKey
调用之间删除密钥get
,从而导致此代码段返回从未在表,而不是所需的KeyNotPresentException。
但是,非空键也是如此。 任何人都可以解释相同的原因。
答案 0 :(得分:0)
在 ConcurrentMaps(ConcurrentHashMaps、ConcurrentSkipListMaps)中不允许空值的主要原因是无法适应在非并发映射中几乎不能容忍的歧义。 ... get(key) 返回 null ,您无法检测键是否显式映射到 null 与键未映射。