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 .