我有一个要迭代的ArrayList。遍历它时,我必须同时删除元素。显然,这引发了java.util.ConcurrentModificationException
。
解决此问题的最佳实践是什么?我应该先克隆列表吗?
我删除的不是循环本身的元素,而是代码的另一部分。
我的代码如下所示:
public class Test() {
private ArrayList<A> abc = new ArrayList<A>();
public void doStuff() {
for (A a : abc)
a.doSomething();
}
public void removeA(A a) {
abc.remove(a);
}
}
a.doSomething
可能打电话Test.removeA()
;
两种选择:
originalList.removeAll(valuesToRemove)
在最后调用remove()
在迭代器本身上使用该方法。请注意,这意味着你不能使用增强的for循环。List<String> list = new ArrayList<String>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
String value = iterator.next();
if (value.length() > 5) {
iterator.remove();
}
}
问题内容: 我正在尝试从这样的迭代中删除一些元素: 当然,当我尝试同时从列表中删除项目时,我会得到一个提示。有解决此问题的简单方法吗? 问题答案: 使用和致电:
问题内容: 我的页面包含一堆表格。我在外循环中遍历表,然后在内循环中遍历表中的每一行。一切正常。但是某些页面具有“下一步”按钮。当我在完成页面后添加代码以单击该代码时,则在遍历表的各行时开始获取StaleElementReferenceException。 这是代码: 我不明白的是,为什么过时的因素根本没有发生?该页面在循环过程中没有更改,我一直等到所有元素都提取完之后。如何避免StaleElem
问题内容: 我们都知道您由于以下原因而无法执行以下操作: 但这显然有时有效,但并非总是如此。这是一些特定的代码: 当然,这导致: 即使没有多个线程。无论如何。 解决此问题的最佳方法是什么?如何在不引发此异常的情况下循环地从集合中删除项目? 我还在这里使用任意值,不一定是an t,因此您不能依赖。 问题答案: 是安全的,您可以这样使用它: 注意,这是在迭代过程中修改集合的唯一安全方法。如果在进行迭代
问题内容: 在java中当遍历一个集合时,删除元素如何避免发生ConcurrentModificationException异常? 问题答案: 1576 是安全的,可以这样使用: 注意,这Iterator.remove()是在迭代过程中修改集合的唯一安全方法。如果在进行迭代时以任何其他方式修改了基础集合,则行为未指定。 同样,如果您有个并想要添加项目,则可以使用,出于相同的原因 ,它可以允许使用。
问题内容: 在Java中,我可以通过使用an ,然后使用迭代器的方法来删除迭代器返回的最后一个元素,如下所示: 我将如何在Python中执行此操作?我在for循环中遍历列表时无法修改列表,因为它会导致内容被跳过(请参阅此处)。而且似乎没有Java的等效接口。 问题答案: 遍历列表的 副本 :
问题内容: 我正在尝试一个练习,在该练习中,我将1000个元素添加到arraylist中,然后再次从列表中系统地删除它们(通过指定索引)。其背后的想法是比较LinkedList和ArrayList的性能。 如果我执行以下操作,那么只有一半的元素会被删除…为什么呢? 亲切的问候阿里安 问题答案: 发生这种情况是因为您要通过删除来更改索引。如果删除元素0,则元素1现在变为元素0。现在,当您下次删除1时