原因?
ArrayList返回的迭代器本质上是fail-fast
。
这个类的迭代器和listIterator
方法返回的迭代器是fail-fas
t:如果在迭代器创建后的任何时候列表在结构上被修改,除了通过迭代器自己的 remove 或 add 方法之外,迭代器将抛出一个ConcurrentModificationException
. 因此,面对并发修改,迭代器快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。
当我不使用它时,这个迭代器从哪里来?
对于集合的增强 for 循环Iterator
被使用,因此您在迭代时不能调用 remove 方法。
所以你的循环与下面相同
for (Iterator<Entry> i = c.iterator(); i.hasNext(); ){
那么解决方案是什么?
iterator.remove();
您可以基于迭代器显式而不是隐式调用和更改循环。
String inputWord = "john";
ArrayList<String> wordlist = new ArrayList<String>();
wordlist.add("rambo");
wordlist.add("john");
for (ListIterator<String> iterator = wordlist.listIterator(); iterator
.hasNext();) {
String z = iterator.next();
if (z.equals(inputWord)) {
iterator.remove();
}
}
System.out.println(wordlist.size());
现在我在哪里可以阅读更多内容?
- For-Each 循环
- 数组列表 Java 文档