Удаление элемента из ArrayList
занимает O (N) времени, потому что вам нужно сместить все элементы после него в направлении начала, чтобы заполнить созданный вами пробел.
retainAll
и removeAll
Однако не используйте эту процедуру для удаления каждого элемента.Они написаны для выполнения всех необходимых сдвигов во время одного прохода через массив.
При прохождении через массив сохраняемые элементы перемещаются вперед через промежуток, созданный любыми удалениями,сдвиг промежутка к концу массива.Элементы, которые должны быть удалены, игнорируются, что приводит к увеличению разрыва.
Поскольку это занимает всего один проход через массив, независимо от того, сколько элементов вы должны удалить, эти методы также работают за O (N) время., если справочная коллекция может сделать contains()
в O (1).