天天看點

關于使用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();
}
           

把目前指向的元素單獨提出來放在條件判斷裡面,平時在寫普通循環的時候寫習慣了,沒有把循環中的元素提出來。

記錄一下