java中使用for循环删除List集合的陷阱

一直以为是数据库的数据取错了,导致后面for循环出错。慢慢调试之后,发现这原来是一个坑。回到正题

 

(错误示范:使用for循环删除list集合)

    for(int i=0;i<list.size();i++) {
        if(list.get(i)!=0) {
            list.remove(i);
        }
    }

错误的原因是每删除list集合的一个元素,list的大小都在发生改变,从而导致索引也在发生改变,从而删除的时候会漏过一些元素。 

 

(正确示范:使用迭代器删除list集合)

    Iterator<Integer> it=list.iterator();
    while(it.hasNext()) {
        Integer m=it.next();
        if(m!=0) {
            it.remove();
        }
    }

 

posted @ 2018-09-09 20:54  professorxin  阅读(10417)  评论(0编辑  收藏  举报