Удалить несколько элементов из ArrayList - PullRequest
31 голосов
/ 10 февраля 2011

У меня есть несколько индексов, и я хочу удалить элементы с этими индексами из ArrayList. Я не могу сделать простую последовательность remove() с, потому что элементы смещаются после каждого удаления. Как мне это решить?

Ответы [ 16 ]

0 голосов
/ 10 апреля 2015

Если вы хотите удалить позиции X в Размер

//a is the ArrayList
a=(ArrayList)a.sublist(0,X-1);
0 голосов
/ 10 февраля 2014

вы можете использовать метод subList с диапазоном индекса, который вы хотите удалить, и затем вызовите clear () для него.

(обратите внимание, что последний параметр исключен и будут удалены только первый и второй элементы):

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<String> animals = new ArrayList<String>();
    animals.add("cow");
    animals.add("dog");
    animals.add("chicken");
    animals.add("cat");
    animals.subList(0, 2).clear();
    for(String s:animals)
        System.out.println(s);
}

}

результат будет: курица кошка

0 голосов
/ 10 февраля 2011

Используйте гуава !Вы ищете метод Iterators.removeAll (Iterator removeFrom, Collection elementsToRemove)

0 голосов
/ 10 февраля 2011

Вы можете сортировать индексы, как сказали многие, или вы можете использовать итератор и вызывать remove ()

List<String> list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    list.add("5");
    list.add("6");
    List<Integer> indexes = new ArrayList<Integer>();
    indexes.add(2);
    indexes.add(5);
    indexes.add(3);
    int cpt = 0;
    Iterator<String> it = list.iterator(); 
    while(it.hasNext()){
        it.next();
        if(indexes.contains(cpt)){
            it.remove();
        }
        cpt++;
    }

Это зависит от того, что вам нужно, но сортировка будет быстрее в большинстве случаев

0 голосов
/ 10 февраля 2011

Если элементы, которые вы хотите удалить, сгруппированы вместе, вы можете выполнить операцию subList(start, end).clear().

Если элементы, которые вы хотите удалить, разбросаны, может быть лучше создать новый ArrayList,добавьте только те элементы, которые вы хотите включить, и затем скопируйте их обратно в исходный список.

Редактировать: теперь я понимаю, что это был не вопрос производительности, а логики.

0 голосов
/ 10 февраля 2011

упорядочить список индексов, например,

, если 2,12,9,7,3, упорядочить до 12,9,7,3,2

, а затем сделать это1005 *

for(var i = 0; i < indexes.length; i++) { source_array.remove(indexes[0]); }

это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...