並發修改異常
處理集合時,可能會遇到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中文網其他相關文章!