@Override
    public V remove(Object key) {
        synchronized (this) {
            Map<K, V> newMap = new HashMap<K, V>(internalMap);
            V val = newMap.remove(key);
            internalMap = newMap;
            return val;
        }
    }
@Override
    public V remove(Object key) {
        synchronized (this) {
            Map<K, V> newMap = new HashMap<K, V>(internalMap);
            V val = newMap.remove(key);
            internalMap = newMap;
            return val;
        }
    }
@ Override public V remove ( Object key ) { synchronized ( this ) { Map < K , V > newMap = new HashMap < K , V > ( internalMap ) ; V val = newMap . remove ( key ) ; internalMap = newMap ; return val ; } }
*
Removed the value and key from this map based on the
provided key.

@see java.util.Map#remove(java.lang.Object)
* Removed the value and key from this map based on the provided key .