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的简单实现,地址在这

  • 相关阅读:
    hdu 1754 I Hate It
    hdu 2546 饭卡
    hdu 4506 小明系列故事——师兄帮帮忙
    hdu 3665 Seaside
    hdu 3790 最短路径问题
    hdu 1869 六度分离
    最长递增字串的三种做法
    问题集???
    IOS开发学习 碎片S
    超级台阶 (NYOJ—76)
  • 原文地址:https://www.cnblogs.com/baron89/p/3593550.html
Copyright © 2011-2022 走看看