Я достиг этого решения, которое позволяет вам удалить все элементы, равные элементу удаления:
private static <T> T[] removeAll(T[] array, T element) {
if (null == array)
throw new IllegalArgumentException("null array");
if (null == element)
throw new IllegalArgumentException("null element");
T[] result = (T[]) Array.newInstance(array.getClass().getComponentType(), array.length);
int j = 0;
for (int i = 0; i < array.length; i++) {
if (!element.equals(array[i]))
result[j++] = array[i];
}
return Arrays.copyOf(result, j);
}
Я также провел несколько тестов, и это решение определенно лучше, чем использование списков. Хотя, если производительность здесь не является проблемой, я бы использовал списки.
Если вам действительно нужно удалить только один элемент (первый), у @ kd304 есть решение.