Перейти к основному содержимому

Удаление элемента из ArrayList

· 2 мин. чтения

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#удалить

В 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 .