zoukankan      html  css  js  c++  java
  • 再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

    再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

    使用

    List<Long> list = new ArrayList<Long>();
    for(Long l : list){
        if(l == 5){
            list.remove(l);
        }
    }    
    for(int i=0; i<list.size(); i++){
        if(l == 5){
           list.remove(l);
        }    
    }

    上面两种遍历方法都会出错,

    第一种循环,增加for循环,当有再次删除时,会出现java.util.ConcurrentModificationException

    第二种循环,一边删除size会变小,list的位置也会改变,就算不出错,也会删除错位置(比如你循环到第2个元素的时候你把它删了, 接下来你去访问第3个元素,实际上访问到的是原先的第4个元素。

    后来查询后得知,要使用iterator删除list

    方法如下

    List<Long> list = new ArrayList<Long>();
    Iterator<Long> it = list.iterator();
    while(it.hasNext){
        if(it.next() == 5){
            it.remove();//注意此处不能用list.remove(it.next());
        }
    }

     以前自已写过一个简单的iterator的简单实现,地址在这

  • 相关阅读:
    Codeforces
    Codeforces
    SCUT
    Codeforces
    Codeforces
    poj 2229 Sumsets(类似于n的m划分)
    poj 1742 Coins(多重背包)
    hdu 2159FATE(完全背包)
    NOIP 普及组 2014 比例简化
    2018.10.2浪在ACM 集训队第三次测试赛
  • 原文地址:https://www.cnblogs.com/baron89/p/3593550.html
Copyright © 2011-2022 走看看