Java集合--ArrayList遍历删除元素
面试问题:ArrayList在遍历移除元素会出现什么情况?
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestList2 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("马"); list.add("张"); list.add("张"); list.add("马"); list.add("马"); // int size = list.size(); // for(int i=0; i<size; i++) { // if("张".equals(list.get(i))) { // list.remove(i); // } // } //java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 //数组下标越界异常 // for(int i=0; i<list.size(); i++) { // if("张".equals(list.get(i))) { // list.remove(i); // } // } //移除结果:马 张 马 马 //遍历删除数组小标为1的张后,数组下标为2的张向前移动下标变为1, //下标为1已经遍历过所以漏删了 //以上情形两种解决方案: //变换下标 // for(int i=0; i<list.size(); i++) { // if("张".equals(list.get(i))) { // list.remove(i); // i--; // } // } //倒序移除元素,不影响数组顺序 for(int i=list.size()-1; i>-1; i--) { if("张".equals(list.get(i))) list.remove(i); } //移除结果: 马 马 马 // for(String str : list) { // if("张".equals(str)) { // list.remove(str); // } // } // java.util.ConcurrentModificationException 并发修改异常 // 原因https://www.cnblogs.com/huangjinyong/p/9455163.html //解决方案:使用Iterator迭代器的remove() // Iterator<String> iterable = list.iterator(); // while(iterable.hasNext()) { // if("张".equals(iterable.next())) { // iterable.remove(); // } // } //移除结果: 马 马 马 for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } } }
标签:
Java集合
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具