天天看点

关于使用Iterator删除List中的多个元素

今天在写代码时要删除List中的多个元素时犯了一个很搞笑的错误,等效的就是以下代码

public static void main(String[] args) {
        List<String> a = new ArrayList<String>();
        a.add("1");
        a.add("2");
        a.add("3");
        a.add("4");
        a.add("5");
        Iterator<String> iterator = a.iterator();
        while(iterator.hasNext()){
            if("1".equals(iterator.next()) || "2".equals(iterator.next()))
                iterator.remove();
        }
    }
           

运行后发现只能删除“1”这个元素,“2”删除不掉,后来才发现判断的时候如果第一个条件不满足,iterator.next()这个方法又会执行一遍,相当于已经不再是当前的元素了,当时写的还特别顺溜。。。

应该改成下面 这样

while(iterator.hasNext()){
    String str = iterator.next();
    if("1".equals(str) || "2".equals(str))
        iterator.remove();
}
           

把当前指向的元素单独提出来放在条件判断里面,平时在写普通循环的时候写习惯了,没有把循环中的元素提出来。

记录一下