@Override
  public HamtPMap<K, V> plus(K key, V value) {
    return !isEmpty()
        ? plus(key, hash(key), checkNotNull(value))
        : new HamtPMap<>(key, hash(key), value, 0, emptyChildren());
  }
@ Override public HamtPMap < K , V > plus ( K key , V value ) { return ! isEmpty ( ) ? plus ( key , hash ( key ) , checkNotNull ( value ) ) : new HamtPMap < > ( key , hash ( key ) , value , 0 , emptyChildren ( ) ) ; }
Returns a new map with the given key-value pair added. If the value is already present, then
this same map will be returned.