周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap
的问题,都是他最近面试遇到的。原提问如下(星球原贴地址:https://t.zsxq.com/11jcuezQs ):
整个提问看着非常复杂,其实归纳来说就是两个问题:
ConcurrentHashMap
为什么 key 和 value 不能为 null?ConcurrentHashMap
能保证复合操作的原子性吗?
下面我会以此提供这两个问题的详细答案,希望对你有帮助。
ConcurrentHashMap 为什么 key 和 value 不能为 null?
ConcurrentHashMap
的 key 和 value 不能为 null 主要是为了避免二义性。null 是一个特殊的值,表示没有对象或没有引用。如果你用 null 作为键,那么你就无法区分这个键是否存在于 ConcurrentHashMap
中,还是根本没有这个键。同样,如果你用 null 作为值,那么你就无法区分这个值是否是真正存储在 ConcurrentHashMap
中的,还是因为找不到对应的键而返回的。
拿 get 方法取值来说,返回的结果为 null 存在两种情况:
- 值没有在集合中 ;