public V putIfAbsent(K key, V value) {
        if (value == null)
            throw new NullPointerException();
        int hash = hash(key.hashCode());
        return segmentFor(hash).put(key, hash, value, true);
    }
{@inheritDoc}

@return the previous value associated with the specified key,
        or <tt>null</tt> if there was no mapping for the key
@throws NullPointerException if the specified key or value is null
commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/concurrent/jsr166/ConcurrentWeakHashMap.java