ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。null 是一个特殊的值,表示没有对象或没有引用。如果你用 null 作为键,那么你就无法区分这个键是否存在于 ConcurrentHashMap 中,还是根本没有这个键。同样,如果你用 null 作为值,那么你就无法区分这个值是否是真正存储在 ConcurrentHashMap ...
if(key==null)thrownewNullPointerException(); 从上面可以看出,在代码中直接就杜绝了使用null的可能性,只有HashMap是支持null的,但是是在put为空的时候,hash方法对null做了特殊处理,为null的时候hash值位0。 层次2:null会带来二义性 之所以并发的ConcurrentHashMap不支持null的深层次的原因在于,null会带来难以容忍...
2、值就是 null(空),所以返回的结果就是它原本的 null(空) 值。 这就产生了歧义问题。 那HashMap允许插入 null(空) 值,难道它就不担心出现歧义吗?这是因为HashMap的设计是给单线程使用的,所以如果取到 null(空) 值,我们可以通过HashMap的 containsKey(key)方 法来区分这个 null(空) 值到底是插入值是 n...
ConcurrentHashMap这么设计的原因是为了避免再多线程并发这一场景下出现歧义问题。也就是说在一个线程试图去ConcurrentHashMap中获取key的情况下,如果返回的结果是null,那么不能判断是由于这个key本身不存在导致的null,或者说是value的值本身就是null这一歧义问题。那么这种情况就会导致线程安全问题,而ConcurrentHashMap它本...
这种现象我们可以认为是线程安全性问题,而ConcurrentHashMap又是一个线程安全的集合,所以自然就不允许key或者value为null。而HashMap中是允许存null的,因为它不需要考虑到线程安全性问题。所以这个问题的核心本质还是ConcurrentHashMap这个并发安全性集合的特性。当然。Doug Lea还认为,不管是否是安全的集合,它都不应该...
publicsynchronizedVput(K key, V value){ // 确认值不为空 if(value ==null) { thrownewNullPointerException();// 如果值为null,则抛出空指针异常 } // 确认值之前不存在Hashtable里 Entry<?,?> tab[] = table; inthash=key.hashCode();// 如果key如果为null,调用这个方法会抛出空指针异常 ...
在 ConcurrentHashMap 中,key 和 value 都不能为 null。如果尝试插入 null 值,会抛出异常。例如:ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap<>();concurrentHashMap.put(null, "javacn.site"); // 抛出异常 类似地,当 value 为 null 时,也会出现异常:String key = "...
在Java语言中,ConcurrentHashMap和Hashtable这些线程安全的集合是不允许key或value插入null值的,而HashMap又允许key或value插入null值,这到底是为什么呢? null值插入演示 首先给HashMap插入null值,实现代码如下: 以上程序的执行结果如下: 从上述结果可以看出,HashMap是允许key或value插入null值的。 接着我们使用同样的方...
应届生不看后悔一辈子!为什么ConcurrentHashMap中key不允许为null?【Java面试】咕泡-Java面试实录 立即播放 打开App,流畅又高清100+个相关视频 更多4894 3 5:37 App 模拟场景题:某平台一千万用户,消息通知活动提醒该怎么实现【Java面试】 5029 -- 1:46 App 【Java面试】字节一面:为什么有些公司禁止使用@...