ArrayList不是线程安全的。
- 如果使用ArrayList的for-each方法遍历元素,则会出现checkModificationException。原因是:for循环中的remove()方法会改变修改次数modCount,遍历时的next()方法也会改变修改次数modCount。此时,判断modCount与expectmodCount不一致,则抛出异常。
- 将list修改为CopyOnWriteArrayList则可以正常运行。
- 如果遍历列表list时,使用ArrayList 的迭代器Iterator是支持remove的。
public class testIterator {
public static void main(String[] args) {
// 1.报异常
// 用for-each循环遍历则会出错
// checkModificationException 修改次数不一致
// 2.将list修改为CopyOnWriteArrayList则可以正常运行。
// 因为CopyOnWriteArrayList是线程安全的。
// 3.
// 任何在获取迭代器之后,再对CopyOnWriteArrayList的修改将不会及时反映到迭代器里
// 即迭代遍历到的还是原有列表里面的数据
// 4.
// ArrayList 的迭代器Iterator是支持remove的
List list = new ArrayList();
list.add("沉默王二");
list.add("沉默王三");
list.add("一个文章真特么有趣的程序员");
Iterator var3 = list.iterator();
while (var3.hasNext()) {
String str = (String) var3.next();
if ("沉默王二".equals(str)) {
var3.remove();
}
}
System.out.println(list);
}
}



