Sobes.tech
Middle

Proponga un algoritmo eficiente para eliminar varios elementos adyacentes desde el medio de una lista implementada con ArrayList.

sobes.tech AI

Respuesta de la IA

Самый эффективный способ удаления нескольких соседних элементов из середины 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)), что менее эффективно.