首頁 > Java > java教程 > 為什麼在 For-Each 循環期間修改 ArrayList 會導致 ConcurrentModificationException?

為什麼在 For-Each 循環期間修改 ArrayList 會導致 ConcurrentModificationException?

Barbara Streisand
發布: 2024-12-13 08:06:11
原創
925 人瀏覽過

Why Does Modifying an ArrayList During a For-Each Loop Cause a ConcurrentModificationException?

ArrayList 的 ConcurrentModificationException

考慮以下程式碼:

private String toString(List aDrugStrengthList) { StringBuilder str = new StringBuilder(); for (DrugStrength aDrugStrength : aDrugStrengthList) { if (!aDrugStrength.isValidDrugDescription()) { aDrugStrengthList.remove(aDrugStrength); } } str.append(aDrugStrengthList); if (str.indexOf("]") != -1) { str.insert(str.lastIndexOf("]"), "\n " ); } return str.toString(); }

考慮以下程式碼:

執行時,此程式碼會觸發出現此異常的原因是,在使用 foreach 迴圈迭代 ArrayList 時修改 ArrayList 是不安全的。

要解決此問題,請將 foreach 循環替換為迭代器循環:
for (Iterator<DrugStrength> it = aDrugStrengthList.iterator(); it.hasNext(); ) {
    DrugStrength aDrugStrength = it.next();
    if (!aDrugStrength.isValidDrugDescription()) {
        it.remove();
    }
}
登入後複製

An迭代器提供了一種在迭代 ArrayList 時從 ArrayList 中刪除元素的安全方法。它維護一個追蹤清單中目前位置的遊標,確保刪除元素不會影響迭代過程。

以上是為什麼在 For-Each 循環期間修改 ArrayList 會導致 ConcurrentModificationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板