思路
1.首先创建集合
2.使用集合对象添加元素
3.创建Iterator对象,并进行循环遍历
public class Test {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> al = new ArrayList<String>();
//添加元素
al.add("hello");
al.add("world");
al.add("java");
//创建Iterator对象
Iterator it = al.iterator();
while(it.hasNext()){ //判断集合中是否会有下一个元素
String str = (String) it.next();
//在此添加一个添加,如果输出到了"world"就再为集合添加"sql"元素
if("world".equals(str)){
al.add("sql");
}
}
System.out.println(al);
}
}
复制代码
这时你会发现程序会出现ConcurrentModificationException异常
通过定位错误的位置,可以知道是String str = (String) it.next();的错误。 可以通过查看iterator的源码得知是因为当前的数量和预期的数量不一致导致的错误错误的原因:在使用iterator遍历集合时,我们又使用ArrayList对象向集合中添加元素造成的。
解决方式:通过使用ListIterator接口的迭代器解决
public class Test {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("hello");
al.add("world");
al.add("java");
//ListIterator是Iterator的扩展
ListIterator<String> li = al.listIterator();
while(li.hasNext()){
String str = li.next();
if("world".equals(str)){
li.add("sql");
}
}
System.out.println(al);
}
}
复制代码
这里需要注意add()方法要使用ListIterator的迭代器对象进行添加
这样问题就完美的解决了