Java中ArrayList邊遍歷邊修改


用for-each 邊遍歷ArrayList 邊修改時:

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        System.out.println(list);

        for (String s : list) {
            if (s.equals("dd")) {
                list.remove(s);
            }
        }
        System.out.println(list);
    }

會報錯

 

可以改用如下方式:

① 用迭代器 iterator進行遍歷刪除

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        System.out.println(list);

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            if (next.equals("dd")) {
                iterator.remove();
            }
        }
        System.out.println(list);
}

 

②:使用最原始的 for循環

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        System.out.println(list);
        
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            if (s.equals("dd")) {
                list.remove(s);
            }
        }
        System.out.println(list);
}

 

③:采用jdk8 Collection中新增的方法removeIf (個人推薦,簡潔快捷新特性)

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        System.out.println(list);

        list.removeIf(next -> next.equals("dd"));
        System.out.println(list);
}

 

 

具體為什么ArrayList不能用 for-each循環去邊遍歷邊刪除,有大量科普文章解釋,具體不再重復闡述,只記錄方法,下面引用一篇個人覺得剖析很徹底的文章

鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM