public SmartFMap<K, V> minus(@NotNull K key) {
    if (myMap instanceof Map) {
      Map<K, V> newMap = new HashMap<>(asMap());
      newMap.remove(key);
      if (newMap.size() <= ARRAY_THRESHOLD) {
        Object[] newArray = new Object[newMap.size() * 2];
        int i = 0;
        for (K k : newMap.keySet()) {
          newArray[i++] = k;
          newArray[i++] = newMap.get(k);
        }
        return new SmartFMap<>(newArray);
      }

      return new SmartFMap<>(newMap);
    }

    Object[] array = (Object[])myMap;
    for (int i = 0; i < array.length; i += 2) {
      if (key.equals(array[i])) {
        if (size() == 1) {
          return emptyMap();
        }

        Object[] newArray = new Object[array.length - 2];
        System.arraycopy(array, 0, newArray, 0, i);
        System.arraycopy(array, i + 2, newArray, i, array.length - i - 2);
        return new SmartFMap<>(newArray);
      }
    }
    return this;
  }
public SmartFMap<K, V> minus(@NotNull K key)