# android arrayList迭代过程删除问题 站点:答源(https://www.dandroid.cn/) 原文:https://www.dandroid.cn/archives/5683 Canonical:https://www.dandroid.cn/archives/5683 作者:dandroid008 发布日期:2018-08-23 最后更新:2023-09-09 04:20 分类:技术方案 内容类型:post 说明:本页是原文的纯文本镜像,供大模型与检索器完整读取;不含导航、广告、付费框。引用请以上方「原文」链接为准。 ## 正文 首先看下几个ArrayList循环过程删除元素的方法(一下内容均基于jdk7) package list; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.prefs.Preferences; public class ListTest { public static void main(String[] args) { List list = new ArrayList<>(Arrays.asList("a1", "ab2", "a3", "ab4", "a5", "ab6", "a7", "ab8", "a9")); // 迭代删除方式一 for (String str : list) { System.out.println(str); if (str.contains("b")) { list.remove(str); } } // 迭代删除方式二 int size = list.size(); for (int i = 0; i < size; i++) { String str = list.get(i); System.out.println(str); if (str.contains("b")) { list.remove(i); // size--; // i--; } } // 迭代删除方式三 for (int i = 0; i < list.size(); i++) { String str = list.get(i); System.out.println(str); if (str.contains("b")) { list.remove(i); } } // 迭代删除方式四 for (Iterator ite = list.iterator(); ite.hasNext();) { String str = ite.next(); System.out.println(str); if (str.contains("b")) { ite.remove(); } } // 迭代删除方式五 for (Iterator ite = list.iterator(); ite.hasNext();) { String str = ite.next(); if (str.contains("b")) { list.remove(str); } } } } 方式一:报错 java.util.ConcurrentModificationException 方式二:报错:下标越界 java.lang.IndexOutOfBoundsException     list移除了元素但size大小未响应变化,所以导致数组下标不对;     list.remove(i)必须size--     而且取出的数据的索引也不准确,同时需要做i--操作 方式三:正常删除,不推荐;每次循环都需要计算list的大小,效率低 方式四:正常删除,推荐使用 方式五:报错: java.util.ConcurrentModificationException --- 由 答源 DAN 底座 1.4.0 生成 · 2026-11-09T00:57:20+00:00