侧边栏壁纸
博主头像
Terry

『LESSON 5』

  • 累计撰写 90 篇文章
  • 累计创建 21 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

为什么HashTable不允许null为键或者值?

Terry
2020-10-11 / 0 评论 / 0 点赞 / 644 阅读 / 459 字 / 正在检测是否收录...

知乎查询到的答案

ConcurrentHashmap和Hashtable都是支持并发的,这样会有一个问题,当你通过get(k)获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)的时候value为null,还是这个key从来没有做过映射。HashMap是非并发的,可以通过contains(key)来做这个判断。而支持并发的Map在调用m.contains(key)和m.get(key),m可能已经不同了。

翻译一下最后一句话,其实contains(key)也是可以使用synchronized进行同步的,所以调用contains(key)得到的就是该线程本时刻map的状态,本身不存在歧义。问题的关键在于多线程情况下,即便此可你通过contains(key)知晓了是否包含null,下一步当你使用这个结果去做一些事情时可能其他线程已经改变了这种状态,这在单线程下是不可能发生的。

摘自https://www.zhihu.com/question/264749854

0

评论区