[JAVA] ConcurrentHashMap does not allow nulls for key and value

ConcurrentHashmap is a thread-safe version of HashMap, but there are some differences.

Basic: Map Somehow the difference in Map

HashMap

Nullable. Not thread safe.

ConcurrentHashMap

[Added from java 1.5] to achieve exclusive control [https://qiita.com/YanHengGo/items/21ca9408fb59ddb7a566). But does not allow nulls.

ConcurrentHashMap.java


    /**
     * Maps the specified key to the specified value in this table.
     * Neither the key nor the value can be null.
     *
     * <p> The value can be retrieved by calling the <tt>get</tt> method
     * with a key that is equal to the original key.
     *
     * @param key key with which the specified value is to be associated
     * @param value value to be associated with the specified key
     * @return the previous value associated with <tt>key</tt>, or
     *         <tt>null</tt> if there was no mapping for <tt>key</tt>
     * @throws NullPointerException if the specified key or value is null
     */
    public V put(K key, V value) {
        if (value == null)
            throw new NullPointerException();
        int hash = hash(key.hashCode());
        return segmentFor(hash).put(key, hash, value, false);
    }

Example:

Sample1.java


        ConcurrentHashMap map = new ConcurrentHashMap();
        map.put("test", null);
Exception in thread "main" java.lang.NullPointerException
	at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:881)
	at playground.Sample1.main(Sample1.java:9)

Sample2.java



        ConcurrentHashMap map = new ConcurrentHashMap();
        map.put(null, "test");
Exception in thread "main" java.lang.NullPointerException
	at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:882)
	at playground.Sample2.main(Sample2.java:12)

result

There is a source that does this when replacing HashMap → ConcurrentHashmap.

Realcode.java


        if (inputvalue == null) {
            return;
        }

Recommended Posts

ConcurrentHashMap does not allow nulls for key and value
Regarding hash key and value mapping
Does the escape sequence (\) not work? (for Mac)
The public key for jenkins-2.249.1-1.1.noarch.rpm is not installed
Guidelines for writing processing when a value exists / does not exist in Java Optional