首頁 >Java >java教程 >迭代和修改ArrayList時如何避免ConcurrentModificationException?

迭代和修改ArrayList時如何避免ConcurrentModificationException?

Patricia Arquette
Patricia Arquette原創
2024-10-30 08:21:28799瀏覽

How to Avoid a ConcurrentModificationException When Iterating and Modifying an ArrayList?

同時遍歷(迭代)和修改 ArrayList 時,會發生 ConcurrentModificationException。本文探討了處理此異常的最佳實踐,概述了替代方法。

避免並發修改異常

為了防止發生異常,有兩個選項可用:

  1. 建立要刪除的值列表:迭代時,將需要刪除的值加入單獨的清單。迭代完成後,對原始清單呼叫“removeAll”方法。
  2. 使用Iterator的Remove方法:不要直接在循環內修改ArrayList,而是使用「remove」方法迭代器本身。這就需要使用傳統的 for 循環,而不是增強的 for 迴圈。

Iterator 的移除方法範例:

考慮移除某個長度的字串的場景ArrayList 中大於5 的值:

<code class="java">List<String> list = new ArrayList<>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
    String value = iterator.next();
    if (value.length() > 5) {
        iterator.remove();
    }
}</code>

在此範例中,迭代器的「刪除」方法用於在迭代原始清單時安全地修改原始清單。

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

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