List集合遍历以及并发修改异常

一、List遍历方式

1、Iterator迭代器遍历

List集合遍历以及并发修改异常

2、ListIterator迭代器遍历

List集合遍历以及并发修改异常

3、for循环和增强for遍历

List集合遍历以及并发修改异常
增强for循环的内部原理是一个Iterator迭代器。

二、并发修改异常

1、异常原因

当使用iterator迭代器遍历集合时,向集合中添加元素会发生并发修改异常。
List集合遍历以及并发修改异常
原因如下图,expectedModCount为预期修改集合次数,modCount 为实际修改集合次数。Itr类中初始状态时expectedModCount和modCount 相等,在调用其中next方法时会对两者进行判断。但是ArrayList中的add方法中每次添加一个元素,modCount 会自动加一。故导致在next方法中判断两者不相等,故出现并发修改异常。
List集合遍历以及并发修改异常
List集合遍历以及并发修改异常

2、异常解决办法

1.改成for循环遍历,用集合对象进行相应的操作
2.改成ListIterator迭代器,ListIterator可以直接往集合中添加元素,因为ListItr类中有add方法,而且在方法体中会将实际修改集合的次数赋值给预期修改值。