并发修改异常ConcurrentModificationException
1.简述:在使用 迭代器对象遍历集合时,使用集合对象修改集合中的元素导致出现异常
public static void main(String[] args) { List<Integer> list=new ArrayList<>();
list.add(1);list.add(2);list.add(3);list.add(4); Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
list.remove(2);
}
}
2.原因:迭代器是依赖于集合的,而集合的改变迭代器并不知道。
3.解决方案:
方式一:迭代器遍历,迭代器修改(ListIterator)
remove:
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);list.add(2);list.add(3);list.add(4); ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
if(integer==2) {
iterator.remove();
}
}
System.out.println(list);
}
add:
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);list.add(2);list.add(3);list.add(4); ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
if(integer==1){
iterator.add(1);
}
}
System.out.println(list);
}
方式二:直接使用for循环遍历集合,修改(size()和get())
public static void main(String[] args) { List<Integer> list=new ArrayList<>();
list.add(1);list.add(2);list.add(3);list.add(4); for (int i = 0; i < list.size(); i++) {
list.set(0, 3);// if (list.get(i)==2) {
list.remove(i);//
}
if (list.get(i)==3) {
list.add(5);//
} }
System.out.println(list);
}
并发修改异常ConcurrentModificationException的更多相关文章
- 理解和解决Java并发修改异常ConcurrentModificationException(转载)
原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...
- 集合框架之——迭代器并发修改异常ConcurrentModificationException
问题: 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 使用普通迭代器出现的异常: ...
- 大杂烩 -- Iterator 并发修改异常ConcurrentModificationException
基础大杂烩 -- 目录 大杂烩 -- Java中Iterator的fast-fail分析 大杂烩 -- Iterator 和 Iterable 区别和联系 问题: 在集合中,判断里面有没有" ...
- 理解和解决Java并发修改异常:ConcurrentModificationException
參考文獻:https://www.jianshu.com/p/f3f6b12330c1 文獻来源:简书 关键字: Java Exception遇到异常信息Exception in thread &qu ...
- ConcurrentModificationException(并发修改异常)的解决
[异常解释] ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.[产生的原因] 迭代器是依赖于集合而存在的,在判断成功后,集合 ...
- 并发修改异常(ConcurrentModificationException)
并发修改异常(ConcurrentModificationException) 这个异常,使用集合的时候应该很常见,这个异常产生的原因是因为java中不允许直接修改集合的结构. 先贴上个有趣的例子,给 ...
- ConcurrentModificationException 集合并发修改异常 解决
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合, ...
- java 15 - 8 集合框架(并发修改异常的产生原因以及解决方案)
问题? 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 面试题: Concu ...
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
1. 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. ConcurrentModi ...
随机推荐
- jQuery学习笔记Fisrt Day
跳过JS直接JQUERY,“不愧是你”. 对就是我. 今天开始jQuery学习第一天. click事件方法: 鼠标点击 dbl事件方法: 双击鼠标 mouseenter事件方法: 鼠标进入 mouse ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- [转]Introduction - Run Excel Macro using VBScript
本文转自:https://wellsr.com/vba/2015/excel/run-macro-without-opening-excel-using-vbscript/ Have you ever ...
- Django后台应用管理名称修改
目标修改位置: 相应需要修改代码位置 然后在APP目录下的这里添加此行 再重启Django 即可得到
- Android Studio添加文件注释头模板集合
Android Studio中设置方式 File -> Settings -> Editor -> File and Code Templates -> 右侧File标签 -& ...
- electron打包出现有文件下载不全的情况
1.根据提示下载相应的东西 https://blog.csdn.net/az44yao/article/details/85242442 具体可以看这个链接 2.有个小坑,如果到了按照链接1的过程,遇 ...
- MySQL数据篇(九)--存储过程实现定时每天清理过期数据
需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录.现在写一个存储过程实现,如果活动过期,就将关联表里面的数据标 ...
- Python语法速查: 5. 运算符、math模块、表达式
返回目录 (1)一些较容易搞错的运算符 一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符.运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是 ...
- Ubuntu笔记本安装高级电源管理工具TLP
Ubuntu系统下的笔记本电脑电量总是下降的很快,尽管目前系统对电源管理的优化已经进步了不少,但还是需要一些工具来辅助. TLP是一款Linux下的高级电源管理工具,相信很多Linux用户会用到它. ...
- 图像处理&计算机视觉中upscale,downscale的翻译理解
最近在看SAN网络(Second-order Attention Network for Single Image Super-Resolution)的论文,其中的Upscale module理解的不 ...