@Override
  public @NotNull FMap<K, V> plus(@NotNull K key, @NotNull V value) {
    for (int i = 0; i < myData.length; i += 2) {
      if (asKey(i).equals(key)) {
        if (asValue(i + 1).equals(value)) {
          return this;
        }
        else {
          Object[] newData = myData.clone();
          newData[i + 1] = value;
          return new ArrayBackedFMap<>(newData);
        }
      }
    }

    if (size() < ARRAY_THRESHOLD) {
      int length = myData.length;
      Object[] newData = Arrays.copyOf(myData, length + 2);
      newData[length] = key;
      newData[length + 1] = value;
      return new ArrayBackedFMap<>(newData);
    }

    Map<K, V> map = toMapInner();
    map.put(key, value);
    return new MapBackedFMap<>(map);
  }
@Override
  public @NotNull FMap<K, V> plus(@NotNull K key, @NotNull V value)