Middle
101
questionbank
Предложите эффективный алгоритм удаления нескольких соседних элементов из середины списка, реализованного с помощью ArrayList.
Ответ от нейросети
sobes.tech AI
Самый эффективный способ удаления нескольких соседних элементов из середины ArrayList - это использовать метод removeRange.
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemoveExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println("Original list: " + list);
int startIndex = 3; // Начальный индекс (включительно)
int endIndex = 6; // Конечный индекс (исключительно)
((ArrayList<Integer>) list).removeRange(startIndex, endIndex); // Удаление элементов с startIndex по endIndex-1 inclusive
System.out.println("List after removing elements: " + list);
}
}
Метод removeRange является защищенным (protected) методом класса ArrayList, поэтому для его использования необходимо явно привести коллекцию к типу ArrayList. Этот метод реализован наиболее эффективно с точки зрения смещения элементов.
Сложность операции удаления k элементов из середины ArrayList составляет O(n-i), где n - размер списка, а i - начальный индекс удаления. removeRange сдвигает элементы за один проход. Повторное использование remove(int index) для каждого удаляемого элемента приводило бы к сложности O(k * (n-i)), что менее эффективно.