В настоящее время я работаю с ConcurrentHashMap
, и я очень хорошо знаком с HashMap
, я ожидал подобное поведение HashMap
, но когда я вставляю null
ключ или значение, ConcurrentHashMap
бросает NullPointerException
.ConcurrentHashMap против HashMap и NullPointerException
Я видел их источники, 'фрагмент S:
...
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
' в ConcurrentHashMap
фрагмент S:
...
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