public CopyOnWriteHashMap<K,V> copyAndRemove(Object key){
  Preconditions.checkArgument(key != null,"Null keys are not supported");
  final int hash=key.hashCode();
  final InnerNode<K,V> newRoot=root.remove(key,hash);
  if (root == newRoot) {
    return this;
  }
 else {
    return new CopyOnWriteHashMap<>(newRoot,size - 1);
  }
}

public CopyOnWriteHashMap < K , V > copyAndRemove ( Object key ) { Preconditions . checkArgument ( key != null , "Null keys are not supported" ) ; final int hash = key . hashCode ( ) ; final InnerNode < K , V > newRoot = root . remove ( key , hash ) ; if ( root == newRoot ) { return this ; } else { return new CopyOnWriteHashMap < > ( newRoot , size - 1 ) ; } }
remove the given key from this map . the current hash table is not modified .
