java源码分析:
public interface List<E>{
Iterator<E> iterator();
boolean add(E e);
}
public abstract class AbstractList<E>{
int modCount = 0;
}
//ArrayList继承了一个类实现了一个接口
public class ArrayList<E> extends AbstractList<E> implements List<E>{
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
int expectedModCount = modCount;
/*
modCount:实际修改集合的次数
expectedModCount:预期修改集合的次数
*/
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
}
}
测试并解决方法实现:
package com.it03;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("ssss");
list.add("world");
//遍历集合,看看有没有world这个元素,如果有我就添加一个javaee这个元素,代码实现
// Iterator<String> it = list.iterator();
// while (it.hasNext()){
// String s = it.next();
// if(s.equals("world")){
// list.add("javaee");
// }
// }
for (int i = 0; i <list.size() ; i++) {
String s = list.get(i);
if(s.equals("world")){
list.add("javaee");
}
}
//输出集合对象
System.out.println(list);
}
}
迭代器下异常报错:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.it03.ListDemo.main(ListDemo.java:21)
修改后输出: