抛出ConcurrentModificationException而不直接循环遍历集合

时间:2017-10-03 19:06:39

标签: java iterator

我有以下代码:

// Creates ArrayList with integers 0-9
ArrayList<Integer> intKeys = new ArrayList<Integer>();
for (int x = 0; x < 10; x++) {
    intKeys.add(x);
}

// Creates iterator with integers 0-9
Iterator<Integer> allKeys = intKeys.iterator();

// Loops 10 times, each time obtaining a key to remove from the ArrayList
for (int x = 0; x < 10; x++) {
    Integer key = allKeys.next();
    intKeys.remove(key);
}

我理解,如果在循环集合时删除集合的元素,则抛出ConcurrentModificationException,例如:

for (String key : someCollection) {
    someCollection.remove(key);    
}

但是现在我没有循环 - 只是任意次数。此外,错误行很有意思Integer key = allKeys.next();这可能是导致此异常的原因吗?

1 个答案:

答案 0 :(得分:0)

在循环播放时删除项目时,根本无法使用列表的Iterator对象。

如果要删除列表中的所有项目:

while (!list.isEmpty()) {
    Integer i = list.remove(0);
    //Do something with the item
}

否则,您可以在没有迭代器的情况下迭代

for (int i = 0; i < list.length(); i++) {
    //Do something with the list
}