• 大杂烩 -- 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---	");
            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---	");
            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() + " ");
            }
        }
    }

    原理分析:

      啦啦啦

  • 相关阅读:
    Docker笔记
    Fedora dnf配置
    Vue杂谈
    各类技术集锦
    在.NET Core 里使用 BouncyCastle 的DES加密算法
    Srapy爬虫之必备知识
    scrapy爬虫之环境安装
    Git很简单--图解攻略
    Vue.js下载方式及基本概念
    ajax与jsonp定义及使用方法
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7092033.html
Copyright © 2020-2023  润新知