@Contract(pure=true)
  public static <T> T @NotNull [] remove(T @NotNull [] src, T element, @NotNull ArrayFactory<? extends T> factory) {
    int idx = find(src, element);
    if (idx == -1) return src;

    return remove(src, idx, factory);
  }
@Contract(pure=true)
  public static <T> T @NotNull [] remove(T @NotNull [] src, T element, @NotNull ArrayFactory<? extends T> factory)