首页/新闻资讯/正文详情

Java for-each 删除元素实测:删倒数第二个不抛异常,因为 hasNext 判的是 !=

发布时间:2026/11/4 16:33:19 来源:云帆数科 栏目:资讯中心
Java for-each 删除元素实测:删倒数第二个不抛异常,因为 hasNext 判的是 !=
Java for-each 删除元素实测删倒数第二个不抛异常因为 hasNext 判的是 !16:37控制台第一行出来3 个元素删第一个抛了ConcurrentModificationException。这题我压根没打算跑。for 循环里删元素会抛异常Java 的常识。第二行就不对了。16:38 第二行3 个元素删第二个没抛。结果[a, c]。我盯着这行看了半天。同一个写法同样是在循环里删位置挪了一下异常没了有点邪门。16:38 一口气跑五种位置5 个元素从第一个删到第五个。每轮重新建一个 list记三件事抛没抛、循环体实际进了几次、删完剩几个。位置 | 原始size | 实际访问了几个 | 删后size | 结果 0 | 5 | 1 | 4 | 抛 1 | 5 | 2 | 4 | 抛 2 | 5 | 3 | 4 | 抛 3 | 5 | 4 | 4 | 没抛剩 [a, b, c, e] 4 | 5 | 5 | 4 | 抛CME 是 ConcurrentModificationException控制台打出来一长串表格里我简写了。第四行是重点。位置 3倒数第二个元素。删掉它一次异常都没抛循环体只进了 4 次。5 个元素末尾那个e从头到尾没被看过。这段代码既没报错也没干完活。16:39 去翻 hasNextJDK 8 的ArrayList内部类Itr第 853 行publicbooleanhasNext(){returncursor!size;}判的是!不是。平时看着差不多在这里差得远。cursor是下一个要返回的下标。走完位置 3cursor 已经是 4。删掉一个元素size 从 5 变成 4。hasNext一比4 ! 4false循环结束。它不觉得自己漏了一个它觉得正好走完。那怎么别的位置就抛删完 size 也变小可 cursor 落在 size 里面hasNext还返回 true进next()。next()第一行是checkForComodification()拿modCount和expectedModCount比你删元素的时候 modCount 加过 1两边不相等抛。删的位置越靠后越容易撞上那个“正好相等”。16:40 换成手写下标一样漏增强 for 有这毛病那手写下标呢。ListStringlnewArrayList(Arrays.asList(a,b,b,c));for(inti0;il.size();i){if(l.get(i).equals(b))l.remove(i);}跑出来[a, b, c]。两个 b只删掉一个剩下那个还在循环已经走过去了。删完元素往前挪i 还往前走一格正好跳过下一个。补一句i--才对得上跑出来[a, c]。这毛病跟写法没关系是“边遍历边改长度”这件事本身有坑。增强 for 把它变成抛异常或者静默结束手写下标是安安静静漏掉连个响都没有。顺手又试了删两个相邻的 b还是那个异常list 剩下[a, b, c]。删第一个的时候异常还没触发第二个才炸。这种一半成功一半失败的状态最难恢复。麻烦的不是抛异常抛异常其实是好事。日志一眼能看见测试一跑就红。麻烦的是不抛的那种。它跑完了结果少了元素界面上看不出来接口也不报错。你只能在业务对不上数的时候回头看还未必想到是循环里删的。这种代码还有个特点换一份数据就变脸。今天删的元素正好排在倒数第二安安静静跑完。明天数据多一条少一条位置变了开始抛异常。同一段代码昨天没事今天有事谁都说不清。它也不只出现在清理任务里。批量改状态、批量删缓存、批量下线账号只要是在 for 里按条件删都有这个位置问题。JDK 为什么不把hasNext里的!改成顺手把这个坑填了。改也白改位置 3 那种会从静默结束变成抛异常位置 0 照样抛。集合在遍历期间不许改这条规矩从第一天就定死了换个符号兜不住。线上再看到这个异常我先翻堆栈第一行。要是ArrayList$Itr.next直接去搜当前类的增强 for十有八九里头藏着remove。改法就两种第一种用IteratorIteratorStringitlist.iterator();while(it.hasNext()){Stringsit.next();if(b.equals(s)||d.equals(s)){it.remove();}}跑出来[a, c, e]。Iterator.remove()里干了两件事删完之后把 cursor 退回去一格再把expectedModCount重新对上modCount。所以它删一个跳一格不重不漏。第二种JDK 8 之后直接removeIflist.removeIf(x-b.equals(x)||d.equals(x));跑出来也是[a, c, e]。三行变一行还不用自己管迭代器。这两个我都在同一台机器上跑过JDK 1.8.0_211输出一样。收工前搜索框里敲for (再用眼睛过一遍循环体带remove(、add(、clear(的都算可疑。这种写法在老项目里不难找一个业务类翻两页就能撞见。add也一样会抛只是数据少的时候循环提前结束看不出来。现在看到for (X x : list)里面带remove的代码我基本不看它能不能跑通直接改。它能跑通可能只是数据刚好排成了那个样子。从 16:37 开始到 16:41 收工四分钟。四分钟能查清的东西线上可能要查四天。

相关推荐

你以为的资产,可能正在掏空你的口袋
你以为的资产,可能正在掏空你的口袋

你以为的资产,可能正在掏空你的口袋为什么全款买的车不算资产?为什么贷款房不一定是负债?存款到底算不算"钱在生钱"?一、先破一个最大的认知误区大多数人判断"我有没有钱",看的是:我名… · 2026/11/4 16:33:19

高反光车间里让视觉算法“看得见“的物理手段
高反光车间里让视觉算法“看得见“的物理手段

1. 车间现状 光通信器件的生产,大多发生在万级甚至千级无尘车间里。为了满足洁净度要求,车间里大量使用透明玻璃隔断、亮洁的环氧树脂自流平地坪、以及不锈钢工作台面。这些材料在洁净度上是"优等生",在机器视觉面前却是"灾难… · 2026/11/4 16:33:19

新手必备!LangGraph多智能体架构实战教程(收藏版)
新手必备!LangGraph多智能体架构实战教程(收藏版)

本文深入解析了LangGraph框架下的多智能体系统,介绍了大模型多智能体系统的概念、优势及架构类型。通过实际案例,详细阐述了多智能体间的通信方式、消息记录管理及自定义多智能体架构的实现。同时,还介绍了监督者架构和群体架构的设计与应用&… · 2026/11/4 16:32:19

AI金融风控实战:机器学习与实时计算的融合应用
AI金融风控实战:机器学习与实时计算的融合应用

1. 项目概述:当AI遇上金融风控金融行业每天要处理数以亿计的交易请求,传统风控系统就像拿着放大镜找蚂蚁——效率低、成本高、还容易看走眼。去年某银行信用卡中心的朋友跟我吐槽,他们团队每天人工审核上千笔可疑交易,加班到凌晨是… · 2026/11/4 17:29:23

MCP 2.0 迁移实战:.NET 生态下的 AI 工具接入与云原生编排
MCP 2.0 迁移实战:.NET 生态下的 AI 工具接入与云原生编排

MCP 2.0 正式发布这件事,我在预览版阶段就一直在跟,正式版落地后第一时间把手上两个内部工具链迁了过去。先说结论:这次升级不是加几个接口那么简单,它把 AI 应用接入协议从"点对点适配"推到了"云原生编排"的… · 2026/11/4 17:29:23

公益帮学网站新闻发布系统设计与实现
公益帮学网站新闻发布系统设计与实现

1. 公益帮学网站新闻发布系统概述公益帮学网站的新闻发布系统是一个专门为教育公益组织设计的在线信息管理平台。这个系统解决了公益组织在信息发布和管理方面的几个核心痛点:信息分类混乱、发布效率低下、互动渠道缺失以及管理权限不明确。我在实际开发过程中发现&… · 2026/11/4 17:29:23

多线程下载器Neat Download Manager深度解析:原理、配置与实战
多线程下载器Neat Download Manager深度解析:原理、配置与实战

1. 为什么我要认真聊一聊这款下载工具 聊下载工具这件事,很多人第一反应是"这年头还有谁在乎下载器"。浏览器自带下载、网盘客户端、各种在线播放,似乎已经把"下载"这件事稀释得没什么存在感了。但只要你真正处理过大体积文件——几… · 2026/11/4 17:29:23

DeepSeek官方模型版本与FlashAttention技术解析
DeepSeek官方模型版本与FlashAttention技术解析

我无法生成关于“DeepSeek V4.1 Flash架构”的博文内容。原因如下:经全面核查,DeepSeek 官方从未发布过名为 “V4.1 Flash” 的模型或架构版本。截至2024年10月,DeepSeek 公开发布的主流大模型为DeepSeek-V2(2024年5月&#xff09… · 2026/11/4 17:29:23

图片撤回功能的技术实现与优化方案
图片撤回功能的技术实现与优化方案

1. 项目背景与核心价值去年在做一个图片社交项目时,我们团队遇到了一个典型的产品需求:用户发送图片后经常手滑发错,需要实现类似聊天软件的"消息撤回"功能。但深入研究后发现,图片撤回远比文字撤回复杂得多——它不仅要… · 2026/11/4 17:28:22

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码