大杂烩 -- Iterator 并发修改异常ConcurrentModificationException

基础大杂烩 -- 目录

大杂烩 -- Java中Iterator的fast-fail分析

大杂烩 -- Iterator 和 Iterable 区别和联系

问题: 
在集合中,判断里面有没有"Hello"这个元素,如果有,我就添加一个"It‘s me"元素。

使用普通迭代器出现的异常: 
ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

产生的原因: 
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。 
其实这个问题描述的是:普通迭代器遍历元素的时候,通过集合是不能修改元素的。

解决: 
A:迭代器迭代元素,迭代器修改元素 
   元素是跟在刚才迭代的元素后面的。 
B:集合遍历元素,集合修改元素(普通for循环进行遍历,forEach依旧是基于迭代器) 
   元素是在最后添加的。

package limeMianShi.iterator_;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class It_modify_for_modify {

    public static void main(String[] args) {
        List<String> forStyle = new ArrayList<String>();
        List<String> iteratorStyle = new ArrayList<String>();

        Iterator<String> iterator = null;

        forStyle.add("Hello");
        forStyle.add("World");
        iteratorStyle.add("Hello");
        iteratorStyle.add("World");
        System.out.print("forStyle---\t");
        for (int i = 0; i < forStyle.size(); i++) {
            if ("Hello".equals(forStyle.get(i)))
                forStyle.add("It‘s me");
        }
        iterator = forStyle.iterator();
        while (iterator.hasNext())
            System.out.print(iterator.next() + " ");
        System.out.println();

        System.out.print("iteratorStyle---\t");
        ListIterator<String> listIterator = iteratorStyle.listIterator();
        while (listIterator.hasNext()) {
            if ("Hello".equals(listIterator.next()))
                listIterator.add("It‘s me");
        }
        iterator = iteratorStyle.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
    }
}

原理分析:

  啦啦啦

时间: 2024-07-31 14:55:42

大杂烩 -- Iterator 并发修改异常ConcurrentModificationException的相关文章

理解和解决Java并发修改异常ConcurrentModificationException(转载)

原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java开发的过程中有没有遇到类似的异常信息 Exception in thread "main" java.util.ConcurrentModificationException, 下面小编简单介绍异常原因以及这种异常的改进方法,内容很简单,有什么问题还望指正. 假设我们要实现这样一个例子:

集合框架之——迭代器并发修改异常ConcurrentModificationException

问题: 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 使用普通迭代器出现的异常: ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常. 产生的原因: 迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常. 其实这个问题描述的是:普通迭代器遍历元素的时候,

并发修改异常ConcurrentModificationException

今天遇到这样的需求: ------> 一个监控页面定时刷新,当前刷新出来的数据中具有一列是ip:port的组合,当前显示的数据,每一次刷新都是不规律显示的,要求按一定秩序排列显示. 问题分析: 因为前端框架不易修改排序的原因,选择了在后台排序,没有sql查询,排除了order by,于是乎想到了对查询结果集来一次"基因重组"的操作. 当前的方式:数据对象存在一个List集合中,将该List转成json返回页面,鉴于此,想到了在List集合上做操作: 计划的方法:遍历集合,在遍历中

ConcurrentModificationException:并发修改异常

需求:我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class Demo { public static void main(String[] args) { List<String> list = new Ar

ConcurrentModificationException 集合并发修改异常 解决

import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. * * ConcurrentModificationException: 但方法监测到对象的并发修改,但不允许这种修改时,抛出此异常. * 产生的原因: *

ConcurrentModificationException(并发修改异常)的解决

[异常解释] ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.[产生的原因] 迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常. 简单描述就是:迭代器遍历元素的时候,是不能通过集合的方法修改元素的.[如何解决] A:迭代器遍历元素,用迭代器的方法修改集合元素 B:集合遍历元素,集合修改元素(普通for) [代码实现] 1 package com.hxl;

并发修改异常(ConcurrentModificationException)

并发修改异常(ConcurrentModificationException) 这个异常,使用集合的时候应该很常见,这个异常产生的原因是因为java中不允许直接修改集合的结构. 先贴上个有趣的例子,给你们看看: package com.xiongda; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Confirm { public static void mai

详解 迭代器 —— Iterator接口、 ListIterator接口 与 并发修改异常

(请关注 本人"Collection集合"博文--<详解 Collection集合>) Iterator接口(迭代器): 概述: 对 collection 进行迭代的迭代器 在我们现阶段的学习中,只需要理解这个接口所提供的三个方法即可: boolean hasNext() 如果仍有元素可以迭代,则返回 true. E next() 返回迭代的下一个元素. void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作). 现在,本

java 15 - 8 集合框架(并发修改异常的产生原因以及解决方案)

问题?   我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现.  面试题: ConcurrentModificationException: 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.  产生的原因:  迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,迭代器的内容不发生改变.所以就报错了,这个错叫并发修改异常.  其实这个问题描述的是:迭代器