code: @Override
      public V put(K key, V value) {
          if (fast) {
              synchronized (this) {
                  Map<K, V> temp = cloneMap(map);
                  V result = temp.put(key, value);
                  map = temp;
                  return (result);
              }
          } else {
              synchronized (map) {
                  return (map.put(key, value));
              }
          }
      }
docs: Associate the specified value with the specified key in this map.
  If the map previously contained a mapping for this key, the old
  value is replaced and returned.
  
  @param key   the key with which the value is to be associated
  @param value the value to be associated with this key
  @return the value previously mapped to the key, or null