在Java中,HashMap的key可以是null。在HashMap中,null被视为一个有效的key,并且只能有一个为null的key存在。如果尝试将多个null作为key添加到HashMap中,则只有一个null会被保留,其他的会被覆盖。需要注意的是,使用null作为key时需要额外小心,因为如果没有正确处理null的情况可能会导致NullPointerException。 0 赞 0 ...
key值不可重复,value可以 每个键最多只能映射到一个值 Map支持泛型,形如:Map<K,V> HashMap类 HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现; HashMap的Entry对象是无序排列的; key值和value值都可以为null,但是一个HashMap只能有一个key为null的映射(key值不可重复); package test; import ...
我们假设此时返回为null的真实情况就是因为这个key没有在map里面映射过。那么我们可以用concurrentHashMap.containsKey(key)来验证我们的假设是否成立,我们期望的结果是返回false。 但是在我们调用concurrentHashMap.get(key)方法之后,containsKey方法之前,有一个线程B执行了concurrentHashMap.put(key,null)的操作。那么我们...
HashMap 使用第 0 个桶存放键为 null 的键值对。 JDK1.6: publicV put(K key, V value) {if(key ==null)returnputForNullKey(value);inthash =hash(key.hashCode());inti =indexFor(hash, table.length);for(Entry<K,V> e = table[i]; e !=null; e =e.next) { Object k;if(e.hash ==...
简介:【Java面试】ConcurrentHashMap的key为什么不允许为null? 首先看到这个问题,肯定先打开源码看一眼 可以发现调用putVal的时候如果key或者value为null,那么就会抛出一个空指针异常。 但是,为什么不允许使用null呢? 答案是:为了避免在多线程环境下出现歧义问题。
回归putVal()方法,我们逐句阅读后也没有发现对于value值为null的处理与限定,因此,它可以存储为null的value值,我们知道HashMap的键值对特点如同身份证与人名一样,key等同于身份证,全国唯一,而value值等同于人名,可以重复,比如全国有上万个叫张伟的,所以value值也就同样允许存储多个null。
这种现象我们可以认为是线程安全性问题,而ConcurrentHashMap又是一个线程安全的集合,所以自然就不允许key或者value为null。而HashMap中是允许存null的,因为它不需要考虑到线程安全性问题。所以这个问题的核心本质还是ConcurrentHashMap这个并发安全性集合的特性。当然。Doug Lea还认为,不管是否是安全的集合,它都不应该...
为什么HashMap的key允许空值,而HashTable却不允许 1.从源码分析 HashMap从源码分析: HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。
1.HashMap和ConcurrentHashMap的区别 HashMap 和 ConcurrentHashMap 在对待 null 的态度上是不同的,在 Java 中,HashMap 是允许 key 和 value 值都为 null 的,如下代码所示: HashMap<String,Object>map=newHashMap; map.put(null,null); if(map.containsKey(null)){ ...