美文网首页
ConcurrentHashMap 的 Key 和 Value

ConcurrentHashMap 的 Key 和 Value

作者: xiaohei_e853 | 来源:发表于2022-08-30 14:32 被阅读0次

    ConcurrentHashMap 的 Key 和 Value 都不能为 null,而 HashMap 却可以,你知道这么设计的原因是什么吗?TreeMap、Hashtable 等 Map 的 Key 和 Value 是否支持 null 呢?

    从ConcurrentHashMap他自己的作者(Doug Lea):

    http://cs.oswego.edu/pipermail/concurrency-interest/2006-May/002485.html

    The main reason that nulls aren't allowed in ConcurrentMaps
    (ConcurrentHashMaps, ConcurrentSkipListMaps) is that
    ambiguities that may be just barely tolerable in non-concurrent
    maps can't be accommodated. The main one is that if
    map.get(key) returns null, you can't detect whether the
    key explicitly maps to null vs the key isn't mapped.
    In a non-concurrent map, you can check this via map.contains(key),
    but in a concurrent one, the map might have changed between calls.

    ConcurrentMaps(ConcurrentHashMaps,ConcurrentSkipListMaps)不允许使用null的主要原因是,无法容纳在非并行映射中几乎无法容忍的歧义。最主要的是,如果map.get(key)return null,则无法检测到该键是否显式映射到null该键。在非并行映射中,您可以通过进行检查 map.contains(key),但在并行映射中,两次调用之间的映射可能已更改。

    hashtable也是线程安全的,所以也是key和value也是不可以null的
    treeMap 线程不安全,但是因为需要排序,进行key的compareTo方法,所以key是不能null中,value是可以的

    相关文章

      网友评论

          本文标题:ConcurrentHashMap 的 Key 和 Value

          本文链接:https://www.haomeiwen.com/subject/ghblnrtx.html