zoukankan      html  css  js  c++  java
  • list在遍历过程中的add/remove

    平时开发过程中,很多人估计都遇到过一个问题:在遍历集合的的过程中,进行add或者remove操作的时候,会出现2类错误,包括:
    java.util.ConcurrentModificationException for in遍历过程中add/remove导致的错误
    java.lang.IndexOutOfBoundsException 越界错误,for循环的时候删除元素。

    那么我们应该怎样避免这个问题呢?

    首先对于add操作:建议利用原生的for循环。remove操作利用foreach操作

    具体代码如下:remove

    add:

    经典错误1:

    什么错误呢?这段代码用于只会输出list的第一个元素。问题出在链式写法上。

    每次循环时候先调用了list.iterator() 在该方法中每次都是重新new了一个新的对象
    public Iterator<E> iterator() {
    return new Itr();
    }
    所以每一次都是一个新的遍历对象,所以输出第一个元素。
    那么为什么每次都要new一个新的Itr()?我猜想应该是为了并发的读,每次读的都是一份独立的数据,避免多个并发读的时候,出现当前指针问题。
    处理办法:将list.iteraotr() 放在外面即可,保证循环中循环的是1个对象。

     经典错误2:

    会陷入死循环

  • 相关阅读:
    LINUX系列:Shell命令
    java程序猿必须掌握的4种线程池
    JAVA编程:Lock线程锁
    Spring框架之IOC的基本配置
    浅谈Java中的内部类
    [XDFZDay2]NOIP模拟
    [XDFZ集训Day1]NOI2020模拟1
    CSP2019游记
    11.11-11.12 CSP模拟总结
    [BJOI2019]排兵布阵
  • 原文地址:https://www.cnblogs.com/lucia557/p/8505085.html
Copyright © 2011-2022 走看看