在迭代期間從ArrayList 中刪除元素時避免並發修改異常
使用高級for 循環迭代集合時修改集合(for-每時修改集合個循環)都可能導致臭名昭著的ConcurrentModificationException。當在迭代期間嘗試從 ArrayList 中刪除元素時,就會發生這種情況。
原因:
for 循環在內部建立清單的副本並迭代這個副本。當一個元素從原始清單中刪除時,副本的大小會立即減小,從而導致當前元素的索引失效。
解決方案:
要避免此問題,請結合迭代器和remove()方法。
迭代器方法:
迭代器是一個迭代集合元素的物件。它具有像 hasNext 這樣的方法,它檢查是否有更多元素,以及 next,它會傳回下一個元素。使用迭代器可以在迭代期間安全刪除。
Iterator<String> iter = myArrayList.iterator(); while (iter.hasNext()) { String str = iter.next(); if (someCondition) iter.remove(); }
在這種方法中,迭代器維護其內部狀態,確保即使在刪除元素後索引仍然有效。 iter.remove() 方法安全地從原始清單中刪除目前元素。
注意: 這種方法比使用帶有索引的傳統 for 迴圈更有效,因為它不需要維護一個單獨的索引變數並在每次刪除後更新它。
以上是如何在迭代過程中安全地從 ArrayList 中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!