目前我与ConcurrentHashMap
工作,我很熟悉HashMap
,我希望类似的行为HashMap
,但是当我插入一个null
键或值,ConcurrentHashMap
抛出一个NullPointerException
。的ConcurrentHashMap VS HashMap和NullPointerException异常
我看到他们的消息人士透露,ConcurrentHashMap
的片段:
...
public V put(K key, V value) {
return putVal(key, value, false);
}
...
final V putVal(K key, V value, boolean onlyIfAbsent) {
if (key == null || value == null) throw new NullPointerException();
....
而且HashMap
的片段:
...
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
...
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
// It Doesn't check null key or value.
....
为什么他们如此不同,当他们与null
键或值工作?这对我没有意义。
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html:'与Hashtable类似,但与HashMap不同,此类不允许将null用作关键字或价值。' – fukanchik