java中迭代集合是发生ConcurrentModificationException
时间: 2023-12-23 12:28:02 浏览: 92
在Java中,当使用迭代器遍历集合时,如果在迭代过程中修改了集合的结构(例如添加或删除元素),就会抛出ConcurrentModificationException异常。这是因为迭代器在遍历集合时会维护一个modCount计数器,用于检测集合是否被修改。如果在迭代过程中发现modCount发生变化,就会抛出ConcurrentModificationException异常。
以下是两种导致ConcurrentModificationException异常的情况及解决方法:
1. 使用普通迭代器遍历集合时,通过集合的add()方法添加元素:
```java
Collection<String> c = new ArrayList<String>();
c.add("Java");
c.add("Android");
c.add("HTML");
c.add("C#");
Iterator<String> it = c.iterator();
while(it.hasNext()) {
String str = it.next();
if(str.equals("Java")) {
c.add("JavaEE"); // 在迭代过程中使用集合的add()方法添加元素
}
}
```
解决方法:使用ListIterator迭代器,并使用它的add()方法添加元素。
2. 使用ListIterator迭代器遍历集合时,通过迭代器的add()方法添加元素:
```java
List<String> c = new ArrayList<String>();
c.add("Java");
c.add("Android");
c.add("HTML");
c.add("C#");
ListIterator<String> it = c.listIterator();
while(it.hasNext()) {
String str = it.next();
if(str.equals("Java")) {
it.add("JavaEE"); // 在迭代过程中使用迭代器的add()方法添加元素
}
}
```
解决方法:使用普通迭代器遍历集合,不使用迭代器的add()方法添加元素。
阅读全文