我有下列抛出ConcurrentModificationException的代码,因为我在同一个列表上使用两个不同的迭代器,其中一个正在修改列表。所以,第二个迭代器在读取列表时抛出异常,因为其他迭代器已经修改了列表。Java中的Iterator如何知道何时抛出ConcurrentModification异常
List<Integer> list = new ArrayList<>();
populate(list);//A method that adds integers to list
ListIterator<Integer> iterator1 = list.listIterator();
ListIterator<Integer> iterator2 = list.listIterator();
while (iterator1.hasNext()) {
if(iterator1.next() < 5)
iterator1.remove();
}
while (iterator2.hasNext()){
if(iterator2.next() < 5) {
//Call handler
}
}
我的问题是如何iterator2
知道内部的list
已经被一些其他修改迭代器如果还没有达到这一点还没有被去除iterator1
的元素?它是如何发现其他一些iterator
突变了list
?一种方法可以跟踪大小,但这不能成为其他迭代器可以替换任何元素的原因。
你为什么在意?您在修改列表之前创建了迭代器。有可能是一个“脏”的国旗,但是,又一次,你为什么要这样的代码工作? – stdunbar
我不希望像这样的代码工作。但我很在乎,知道如何检测到这种情况。 –
使用Source是免费的! –