Удаление элементов в ArrayList

Рейтинг: 4Ответов: 3Опубликовано: 19.12.2014

Как известно, после удаления элемента из середины списка ArrayList, часть массива, которая следовала после данного элемента, перезаписывается на позицию влево, чтоб перекрыть пустую ячейку. Если стоит задача удалить несколько элементов из середины списка одной операцией (т. е. чтоб избежать многоразовой перезаписи массива), как это можно сделать?

Ответы

▲ 5Принят

Как обычно - наследованием:

public class MyArrayList<T> extends ArrayList<T> {
    public void remove(int startIndex, int endIndex) {
       //здесь и придумывайте свой гениальный код
    }
}
▲ 5

Используйте методы removeAll и sublist. sublist - для создания коллекции (пула элементов), которую нужно удалить. А removeAll уже для удаления элементов.

Пример кода:

public static void main(String[] args){
       List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        List<Integer> sublist = list.subList(2,5); // Удаляем с 2 по 4й элемент включительно
        list.removeAll(sublist);
        System.out.println(list); //[1, 2, 6, 7, 8]
    }
}

//В одну строку

public static void main(String[] args){
       List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.removeAll(list.subList(2,5));
        System.out.println(list); //[1, 2, 6, 7, 8]
    }
}
▲ 1

использовать removeAll(Collection<?> c)
наследовать и использовать removeRange(int fromIndex, int toIndex)