«1. Обзор

В этом руководстве мы рассмотрим, как удалять элементы из ArrayList в Java, используя различные методы. Имея список видов спорта, давайте посмотрим, как мы можем избавиться от некоторых элементов следующего списка:

List<String> sports = new ArrayList<>();
sports.add("Football");
sports.add("Basketball");
sports.add("Baseball");
sports.add("Boxing");
sports.add("Cycling");

2. ArrayList#remove

ArrayList имеет два доступных метода для удаления элемента, передавая индекс удаляемый элемент или передача самого удаляемого элемента, если он присутствует. Мы увидим оба варианта использования.

2.1. Удалить по индексу

Используя remove, передав индекс в качестве параметра, мы можем удалить элемент в указанной позиции в списке и сдвинуть все последующие элементы влево, вычитая единицу из их индексов. После выполнения метод remove вернет удаленный элемент:

sports.remove(1); // since index starts at 0, this will remove "Basketball"
assertEquals(4, sports.size());
assertNotEquals(sports.get(1), "Basketball");

2.2. Удалить по элементу

Другой способ — удалить первое вхождение элемента из списка с помощью этого метода. Формально говоря, мы удаляем элемент с наименьшим индексом, если он существует, если нет, то список остается неизменным:

sports.remove("Baseball");
assertEquals(4, sports.size());
assertFalse(sports.contains("Baseball"));

3. Удаление во время итерации

Иногда мы хотим удалить элемент из ArrayList, зацикливаем. Из-за того, что ConcurrentModificationException не генерируется, нам нужно использовать класс Iterator, чтобы сделать это правильно.

Давайте посмотрим, как мы можем избавиться от элемента в цикле:

Iterator<String> iterator = sports.iterator();
while (iterator.hasNext()) {
    if (iterator.next().equals("Boxing")) {
        iterator.remove();
    }
}

4. ArrayList#removeIf (JDK 8+)

Если мы используем JDK 8 или более позднюю версию, мы можем взять преимущество ArrayList#removeIf, которое удаляет все элементы ArrayList, удовлетворяющие заданному предикату.

sports.removeIf(p -> p.equals("Cycling"));
assertEquals(4, sports.size());
assertFalse(sports.contains("Cycling"));

Наконец, мы можем сделать это с помощью сторонних библиотек, таких как Apache Commons, и, если мы хотим углубиться, мы можем увидеть, как эффективно удалить все определенные вхождения.

5. Заключение

В этом руководстве мы рассмотрели различные способы удаления элементов из ArrayList в Java.

Как обычно, все примеры, использованные в этом руководстве, доступны на GitHub.