从List中动态删除元素

jam*_*ang 5 java arraylist

我在迭代列表时删除列表元素时遇到问题.码:

For (WebElement element: list){
    if (!element.isEnabled() || !element.isSelected()){
        list.remove(element);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个ConcurrentModificationException,我完全理解.我在循环列表中删除列表中的项目.直觉上,这会搞砸循环的索引.

我的问题是,怎么回事我应该删除或者不元素enabledselected从这个名单?

Joh*_*erg 8

从循环中的列表中删除元素的最简单方法是使用ListIterator例程并使用例程删除元素 iterator.remove()


Cla*_*diu 8

通过迭代修改列表,使用迭代器之外的方式会导致未定义的行为.您必须显式使用迭代器:

Iterator<WebElement> iter = list.iterator();
while (iter.hasNext()) {
    WebElement element = iter.next();
    if (!element.isEnabled() || !element.isSelected()) {
        iter.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此问

  • 这不会将`List`转换为`Iterator` - `Iterator`只是一个作用于该列表本身的对象 - 它是一个迭代列表的接口.当你调用`iter.remove()`时,它确实在修改底层列表. (2认同)