@Override
  public @NotNull FMap<K, V> minus(@NotNull K key) {
    for (int i = 0; i < myData.length; i += 2) {
      if (asKey(i).equals(key)) {
        if (size() == 3) {
          if (i == 0) {
            return new TwoKeysFMap<>(asKey(2), asValue(3), asKey(4), asValue(5));
          }
          else if (i == 2) {
            return new TwoKeysFMap<>(asKey(0), asValue(1), asKey(4), asValue(5));
          }
          else {
            assert i == 4;
            return new TwoKeysFMap<>(asKey(0), asValue(1), asKey(2), asValue(3));
          }
        }
        else {
          Object[] newData = new Object[myData.length - 2];
          System.arraycopy(myData, 0, newData, 0, i);
          System.arraycopy(myData, i + 2, newData, i, myData.length - 2 - i);
          return new ArrayBackedFMap<>(newData);
        }
      }
    }
    return this;
  }
@Override
  public @NotNull FMap<K, V> minus(@NotNull K key)