首頁 >Java >java教程 >在迭代過程中從集合中刪除元素時如何避免 ConcurrentModificationException?

在迭代過程中從集合中刪除元素時如何避免 ConcurrentModificationException?

DDD
DDD原創
2024-12-08 14:15:14273瀏覽

How to Avoid ConcurrentModificationException When Removing Elements from a Collection During Iteration?

在迭代期間刪除集合元素時避免ConcurrentModificationException

簡介

簡介

方法 1:迭代集合副本

一種方法是建立集合的副本並迭代該副本而不是原始集合。這可以確保原始集合在迭代過程中不會被修改。

List<Foo> fooListCopy = new ArrayList<>(fooList);
for (Foo foo : fooListCopy) {
    // Modify the actual fooList
}
範例:

方法2:使用集合迭代器

另一種方法是使用原始集合迭代器

Iterator<Foo> itr = fooList.iterator();
while (itr.hasNext()) {
    // Modify the actual fooList using itr.remove()
}
另一種方法是使用原始集合迭代提供的迭代器。迭代器提供了一種安全的方法來遍歷集合並在迭代時刪除元素。

範例:

  • 使用JDK 8 或的替代方法更高

removeIf:

此方法採用謂詞並從集合中刪除滿足謂詞的所有元素。

    Streams:
  • 使用流,您可以過濾集合以建立包含所需元素的新集合,然後用過濾後的集合取代原始集合收集。
  • 選擇考慮
  • 最佳方法取決於特定場景:
  • 收集和刪除:
  • 適用於任何集合,但需要兩個
  • ListIterator:
  • 對列表高效,支援新增和刪除操作。
  • 迭代器:
僅支援刪除操作。

    JDK 8 Streams:
  • 迭代一次並有效率地過濾元素。
  • 子清單或子集:
  • 可有效刪除排序集合中的連續元素。
其他注意事項包括:複製方法是安全的,但會產生複製集合的成本。 迭代器方法可能並非所有迭代器實作都支援。 JDK 8 流修改集合的引用,需要重新分配。

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

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