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

List集合

  • 一、List遍历方式
    • 1、Iterator迭代器遍历
    • 2、ListIterator迭代器遍历
    • 3、for循环和增强for遍历
  • 二、并发修改异常
    • 1、异常原因
    • 2、异常解决办法

一、List遍历方式

1、Iterator迭代器遍历

List集合遍历以及并发修改异常_第1张图片

2、ListIterator迭代器遍历

List集合遍历以及并发修改异常_第2张图片

3、for循环和增强for遍历

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

二、并发修改异常

1、异常原因

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

2、异常解决办法

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

你可能感兴趣的:(集合)