zoukankan      html  css  js  c++  java
  • 不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁

    不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。 

    正例: Iterator<String> iterator = list.iterator();  

    while (iterator.hasNext()) {              

    String item = iterator.next();                      

     if (删除元素的条件) {                             

     iterator.remove();               

      }     

     } 

    反例: List<String> list = new ArrayList<String>();     

     list.add("1");    

      list.add("2");     

     for (String item : list) {        

      if ("1".equals(item)) {            

      list.remove(item);          

    }      

    }  

    说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的 结果吗? 


    根本原因在于expectedModCount与modCount他们的不相等,由于执行了ArrayList中的remove(),modCount在每一次循环值会发生改变,而expectedModCount并没有发生,在执行checkForComodification()方法就会抛出异常。

  • 相关阅读:
    QT4.8.7和VS2010环境搭建及使用
    SQL Server--获取磁盘空间使用情况
    SQL SERVER--DBA 常用到的一些脚本
    MySQL--REPLACE INTO与自增
    MySQL--更新自增列的潜在风险
    MySQL--Skip GTID CAP
    MySQL--MHA与GTID
    MySQL--自增列学习
    MySQL--MHA原理
    MySQL--BNL/ICP/MRR/BKA
  • 原文地址:https://www.cnblogs.com/baobeiqi-e/p/9884747.html
Copyright © 2011-2022 走看看