• 关于集合越界后 不能使用迭代器遍历的处理方式


    迭代器的并发修改异常
    迭代器的并发修改异常 java.util.ConcurrentModificationException
    就是在遍历的过程中,使用了集合方法修改了集合的长度,不允许的

    原因
    运行上述代码发生了错误 java.util.ConcurrentModificationException这是什么原因呢?
    在迭代过程中,使用了集合的方法对元素进行操作。
    导致迭代器并不知道集合中的变化,容易引发数据的不确定性。

    并发修改异常解决办法:
    在迭代时,不要使用集合的方法操作元素。
    或者通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。代码如下。

    public class Demo3_List {

    /**
    ** A:案例演示
    * 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
    */
    public static void main(String[] args) {
    List list = new ArrayList();
    list.add("a"); //Object obj = new String();
    list.add("b");
    list.add("world");
    list.add("c");
    list.add("d");
    list.add("e");

    /*Iterator it = list.iterator(); //获取迭代器
    while(it.hasNext()) { //判断集合中是否有元素
    String str = (String)it.next(); //向下转型
    if("world".equals(str)) {
    list.add("javaee"); //遍历的同时在增加元素,并发修改ConcurrentModificationException
    }
    }*/

    ListIterator lit = list.listIterator(); //获取迭代器(List集合特有的)
    while(lit.hasNext()) {
    String str = (String)lit.next(); //向下转型
    if("world".equals(str)) {
    //list.add("javaee"); //遍历的同时在增加元素,并发修改ConcurrentModificationException
    lit.add("javaee");
    }
    }

    System.out.println(list);
    }

    }

  • 相关阅读:
    web.xml中/与/*的区别
    restController相关
    mvc:resources
    RequestMethod 相关
    Springside学习
    命名规范的反思
    C++ 构造中调用构造
    C++ 匿名对象的生命周期
    C++ 构造函数的对象初始化列表
    C++ 类的构造函数使用规则
  • 原文地址:https://www.cnblogs.com/lijun6/p/10386563.html
Copyright © 2020-2023  润新知