首頁 >Java >java教程 >迭代集合時如何避免 ConcurrentModificationException?

迭代集合時如何避免 ConcurrentModificationException?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-23 20:23:12621瀏覽

How to Avoid ConcurrentModificationException When Iterating Through Collections?

並發修改異常

處理集合時,可能會遇到ConcurrentModificationException,表示集合在迭代器中被修改使用。這對於調試來說可能是一個令人困惑的錯誤,特別是如果您在程式碼中沒有看到任何明顯的並發性。

考慮以下範例:

import java.util.*;

public class SomeClass {
    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}

在此程式碼中,ConcurrentModificationException 是拋出,因為在建立迭代器但尚未使用清單s 時,透過新增元素(使用s.add( ))修改了列表s。

To要解決此問題,您應該在清單完全填充後建立迭代器。這是程式碼的更正版本:

import java.util.*;

public class SomeClass {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for (String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();
        if (it.hasNext()) {
            String item = it.next();
        }

        System.out.println(s);
    }
}

此修改可確保在完全修改集合後建立和使用迭代器,從而防止任何並發問題。

以上是迭代集合時如何避免 ConcurrentModificationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn