@Override
    public V put(K key, V value) {
        synchronized (this) {
            Map<K, V> newMap = new HashMap<K, V>(internalMap);
            V val = newMap.put(key, value);
            internalMap = newMap;
            return val;
        }
    }
@Override
    public V put(K key, V value) {
        synchronized (this) {
            Map<K, V> newMap = new HashMap<K, V>(internalMap);
            V val = newMap.put(key, value);
            internalMap = newMap;
            return val;
        }
    }
@ Override public V put ( K key , V value ) { synchronized ( this ) { Map < K , V > newMap = new HashMap < K , V > ( internalMap ) ; V val = newMap . put ( key , value ) ; internalMap = newMap ; return val ; } }
*
Adds the provided key and value to this map.

@see java.util.Map#put(java.lang.Object, java.lang.Object)
* Adds the provided key and value to this map .