0

在迭代列表时插入列表是不安全的吗?想法?我个人不确定...

4

2 回答 2

1

如果您使用对象遍历集合Iterator,则更改底层集合将创建一个ConcurrentModificationError会使代码崩溃的集合。即使您使用的是 for-each 循环,这也适用,因为这种类型的循环隐式声明了一个Iterator.

有关 ConcurrentModificationException 的更多信息。

于 2013-03-27T04:19:20.577 回答
1

正如我所料,它会抛出 ConcurrentModificationException。我在简单的例子中测试它:

public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        for(Iterator<Integer> it = list.iterator(); it.hasNext();it.next()){
            System.out.println(it.toString());
            list.add(4);
        }
    }
}

将 ArrayList 更改为 LinkedList 给出相同的结果。如果我完全记得只有删除操作是有效的

于 2013-03-27T04:24:13.787 回答