java 并发操作list集合导致java.util.ConcurrentModificationException 使用迭代器

在ROS中使用行为树 在ROS中使用行为树 我提供的工程示例文件: demo链接 文章目录在ROS中使用行为树0、 学习本教程的前提1、 behaviorTree 库安装(ROS使用下的安装方式)2、 处理 behaviortree 库并准备好 service 和 ros action2.1 对ROS 的 service 和 action 进行封装,使其在 behaviortree 上使用更加方便。2.2 创建一个 service 和一个 action2.3 创建与决策树相关的数据类型2.4 修改`package.xml`文件2 阅读详情

需求:我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现

 

代码如下:

 

[java] view plain copy

  1. public class Test {  
  2.         public static void main(String[] args) {  
  3.             List<String> list = new ArrayList<String>();  
  4.               
  5.             list.add("java");  
  6.             list.add("world");  
  7.             list.add("android");  
  8.               
  9.             Iterator<String> iterator = list.iterator();  
  10.             while(iterator.hasNext()){  
  11.                 String content = iterator.next();  
  12.                 if("world".equals(content)){  
  13.                     list.add("hello");  
  14.                 }  
  15.             }  
  16.             System.out.println(list);  
  17.         }  
  18. }  


运行报错信息:

首先我们打开jdk文档查看下这个异常,因为java是面向对象语言,异常也封装成了对象,

ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
 其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
 如何解决呢?
 A:迭代器迭代元素,迭代器修改元素
元素是跟在刚才迭代的元素后面的。
 B:集合遍历元素,集合修改元素(普通for)
 元素在最后添加的

 

解决方案:for循环我就不试了,就用另一种方式解决,代码如下:

 

[java] view plain copy

  1. public class Test {  
  2.         public static void main(String[] args) {  
  3.             List<String> list = new ArrayList<String>();  
  4.               
  5.             list.add("java");  
  6.             list.add("world");  
  7.             list.add("android");  
  8.              ListIterator lit = list.listIterator();  
  9.              while (lit.hasNext()) {  
  10.              String s = (String) lit.next();  
  11.              if ("world".equals(s)) {  
  12.              lit.add("javaee");  
  13.               }  
  14.              }  
  15.              System.out.println(list);  
  16.         }  
  17. }  


因为ListIterator有add()方法 就解决了

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南) 本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。 阅读详情

相关推荐

Zenoh:统一数据平面协议,重塑物联网与边缘计算架构

在分布式系统与物联网领域,数据通信与处理常面临协议割裂的挑战。传统方案如MQTT、Kafka、gRPC等,分别针对发布/订阅、流处理和RPC等不同场景,导致架构复杂、集成成本高。其核心问题在于未能统一处理“运动中数据”(Data in Motion)与“静止中数据”(Data at Rest)。Zenoh协议通过创新的“Key-Value”寻址与“Selector”查询语言,将发布/订阅、存储、查询和计算四种核心操作融合进单一协议,构建了统一的抽象层。这种设计实现了极低的协议开销(仅5字节头部)和地理分布式

weixin_29597551的博客 290

java 并发操作list集合导致java.util.ConcurrentModificationException

java 并发操作list集合导致java.util.ConcurrentModificationException

zhouguizhi 2476

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

ArrayList删除元素时导致的java.util.ConcurrentModificationException错误的分析及源码解读

集合对于开发者来说都不陌生,可以说是我们日常开发中使用最频繁的对象之一,尤其是ArrayList,可是对于一些开发者并不真正了解它,只是使用习惯了,也就按照集合中基础的一些api使用了,但有时候却因为错误的使用集合导致代码的性能较差,甚至出现致命错误的代码。前几天在做代码review的时候,发现有同事提交了这么一段代码,它的意图就是从文章列表中删除标题不合法的的文章。这位同事还不是很服气,觉得这么写没多大问题,之前很多代码就是这么写的啊。基于此,我们从头分析一下。

泗水长流的博客 1231

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 225

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 431

java.util.ConcurrentModificationException 异常

java.util.ConcurrentModificationException

SunnerChen的博客 2810

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2602

Java ConcurrentModificationException异常原因和解决方法

java.util.ConcurrentModificationException异常的原因与解决方案

yangf257的博客 2866

流程图详解Transformer最核心的多头注意力机制,QKV流向清晰明了

本文详细讲解了Transformer模型中的多头注意力机制(Multi-head Attention)。通过类比多人评估同一事物的不同视角,说明多头机制能综合多个注意力权重获得更有效的输出。文章逐步推导了多头注意力的计算过程:将输入矩阵X(4×512维)分别与8组Q、K、V权重矩阵相乘,得到8组head(每组4×64维),拼接后经Wo矩阵变换恢复为4×512维输出。整个过程涉及37个待训练参数矩阵(1个Wo、8组Wq/Wk/Wv)。该机制通过并行计算多个注意力头,能更全面捕捉输入特征间的复杂关系。

人工智能研究所的博客 263

【LLC快速上手系列】如何在LLC谐振里优雅地调死区时间?

用示波器死盯Vds波形,找到ZVS临界点;别听“经验值”,亲自调才准;死区时间并非越短越好,也不是越长越稳,而是要“刚刚好”;用热成像看MOSFET温升变化,ZVS调好了,温度马上掉2~5℃;轻载难ZVS?适当提升频率 or 降低Lr可破!

weixin_43199439的博客 494

java.util.ConcurrentModificationException: null 报错解决

ConcurrentModificationException报错解决及相应的List知识扩展

qq_51741039的博客 3万+

五、MT8168 音频驱动之SPEAKER

本章主要讲解MT8168平台的内部SPEAKER驱动配置。分为HP接法和LINE OUT接法。2.1.3 audio_custom_exp.h设置。2.1.4 mixer_paths.xml设置。2.2.3 mixer_paths.xml设置。2.1.2 ProjectConfig 设置。2.2.2 ProjectConfig 设置。2.2.1 deconfig设置。2.1.1 DTS设置。......

Joon2020的博客 1664

[报错信息] : java.util.ConcurrentModificationException - Java集合操作出现

前言 List集合操作时有时候会出现 java.util.ConcurrentModificationException,翻译过来就是并发修改异常. 先看Java API 中对于ConcurrentModificationException是如何介绍的. 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 多线程操作时出现 : 某个线程在 Collection 上进行迭代时,通常不允...

Clearlight's Blog 1064

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ConcurrentModificationException 异常处理

ConcurrentModificationException 是并发编程中常见的问题,通常是因为集合被多个线程共享,并且在迭代过程中被意外修改。通过上述解决方案,可以有效地避免这类问题的发生。

weixin_45809780的博客 954

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

List 递归删除元素java.util.ConcurrentModificationException

List 递归删除元素 在使用list迭代器移除元素的时候,如果存在递归调用就会报如下错 Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.uti...

iuie_sl的博客 1460

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java.util.ConcurrentModificationException 详解

问题出现 这次写代码写的比较急出现的一个问题,在遍历的时候使用Iterator在删除的时候用了List的remove,就出现了java.util.ConcurrentModificationException; public static void main(String[] args) { List<Integer> li=new ArrayList<Integer&g...

王者之峰 794

Java中集合的并发修改异常问题(ConcurrentModificationException)

问题的引出 当我们从集合中找出某个元素并删除的时候可能出现一种并发修改异常问题。 一、哪些问题遍历存在问题? 迭代器遍历过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改至不一致。 例如: List list=new ArrayList<>(); list.add(“罗兆1”); list.add(“罗兆2”); list.add(“罗兆3”); Iterator iterator = list.iterator(); //迭代器方式进行遍历 while

helpluozhao123的博客 2226

java集合--java.util.ConcurrentModificationException异常

ConcurrentModificationException 异常:并发修改异常,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。一个线程对collection集合迭代,另一个线程对Collection进行修改的时候, 就会出现上面的异常. 下面看一下代码: package cn.itcast.p4.list.demo; import java.uti...

aodaidi6752的博客 157

JAVA集合异常java.util.ConcurrentModificationException

报异常的代码: public class Demo01Iteractor { public static void main(String[] args) { Collection<String> collection = new ArrayList<>(); Iterator<String> it = collect...

Timber666的博客 381

List集合删除元素方式:避免java.util.ConcurrentModificationException异常

方式一,使用Iterator,顺序向下,如果找到元素,则使用remove方法进行移除。方式二,倒序遍历List,如果找到元素,则使用remove方法进行移除。方式三,正序遍历List,如果找到元素,则使用remove方法进行移除,然后进行索引“自减”。方式四,使用jdk1.8新增的Stream流操作。...

*** 棋了个怪_Rachel *** 2175

循环遍历的过程中删除集合中的元素 报 “ java.util.ConcurrentModificationException: null ”

今天想要在循环遍历的过程中删除集合中的元素,但是报了一个这样的bug : java.util.ConcurrentModificationException: null可以翻译成“并发修改异常”。 测试时就报错了,后面也是上网查了下原因,不能用这种方式移除: 原因: 循环的时候,进行了删除的操作,才会报这种错,因为:迭代器的modCount和expectedModCount的值不一致; 循环中是一个迭代器来进行迭代的(参考java forEach实现原理). 可以去看一下它的iterator..

qq_43035664的博客 521

java.util.ConcurrentModificationException: null

问题点:在 for-each 循环中直接调用 resultList.remove(bizLeaderActivityOrdination),会触发 ConcurrentModificationException 异常。原因:Java 的 for-each 循环基于迭代器实现,不允许在迭代过程中修改集合。1. ConcurrentModificationException 风险。// 处理空格和边界情况。

weixin_63710625的博客 358

List foreach 抛出java.util.ConcurrentModificationException分析

List foreach 抛出java.util.ConcurrentModificationException分析

哆啦A梦 740

list操作中的 ConcurrentModificationException 处理

当使用for循环遍历list的时候,根据上面的代码可以知道,一开始的时候保存了一个expectedModCount这个的初始值为初始的modCount,如果在遍历过程中出现了修改list的长度,就会出现modCount值的改变(非迭代器的方法),则在下一次的遍历过程中就会出现两个值的不相等,就会抛出ConcurrentModificationException错误。这其实是集合的fasfail机制。多线程的情况下,本质是一个线程在遍历的时候,另一个线程对list进行了修改,才导致了这样的问题。

qq_44166712的博客 1023

List中subList方法抛出异常java.util.ConcurrentModificationException原理分析

1、首先从测试代码开始: public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0;i<6000;i++){ list.add(...

qq_36608921的博客 1292
上一篇: string 转byte[] 如1122转{0x11,0x12}
下一篇: android 自动获取短信验证码
github_as
博客等级 码龄9年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值