阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,
在foreach循环中,对元素进行 remove()/add() 操作需要使用Iterator ,如果运行在多线程环境下,需要对Iterator对象枷锁。
public class ForeachTest {
public static void main(String[] args){
List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
for (String temp : a) {
if("2".equals(temp)){
a.remove(temp);
}
}
System.out.println(a);
}
}
此方法执行报错信息如下:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at sysman_service_intf.ForeachTest.main(ForeachTest.java:28)
从错误信息能够看出异常出现在checkForComodification()方法中。
下面我们分析异常出现的原因:
阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,的更多相关文章
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- 为什么iterator,foreach遍历时不能进行remove操作?除了一种情况可以这样(特殊情况)?
Exception in thread "main" java.util.ConcurrentModificationException 并发修改异常引发的思考! 1 foreac ...
- 公司C++规范学习
目录 公司C++规范学习 语法部分 风格/约定 公司C++规范学习 语法部分 class和struct关键字的选择:class表示被封装的用户自定义类型,不公开定义非静态数据成员,struct表示数据 ...
- 阿里weex学习入门必备
1.阿里weex学习前景 至于这些东西,可以参照一下链接去看看其作用.... http://share.iclient.ifeng.com/news/sharenews.f?forward=1& ...
- 阿里云学习之IOT物联网套件(客户端与服务端的后台数据传输)
设备端代码(mqttClient):https://help.aliyun.com/document_detail/42648.html?spm=5176.doc30579.6.569.ZEgA1g ...
- 阿里规范不建议多表Join,可这SQL要怎么写?
阿里开发手册的描述,禁止多表join: 手册上写着[强制],相信很多同学项目里面的代码都不满足这个要求. 但是关键问题是:不用join,这SQL究竟要怎么写?! 分解关联查询 即对每个要关联的表进行单 ...
- 零基础学习java------day14-----泛型,foreach,可变参数,数组和集合间的转换,Set,Map,
1.泛型(jdk1.5以后出现) https://www.cnblogs.com/lwbqqyumidi/p/3837629.html#!comments (1)为什么要用泛型? 限制集合,让它只能存 ...
- Promise/A+规范学习总结
Promise的实现:因为他只是一个规范,所以在不同的框架或者平台下有不同的实现 Angular:$q服务 Node:q模块,co,then Es6:Promise, yield Es7:async ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
随机推荐
- 小程序之 swiper高度根据图片高度变化
今天做的是这个效果⬇️ swiper的高度根据图片的高度而改变 wxml:<swiper indicator-dots="{{indicatorDots}}" vertic ...
- 如何在开发过程中获取客户端的ip呢?
在开发工作中,我们常常需要获取客户端的IP.一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...
- 序列比对和构建进化树(clustalw和phylip)
安装clustalw很简单,不提了. 找了几个蛋白序列进行比对,命名为dm.fasta 1.输入 ./clustalw2 进入交互模式 2.选择1 并输入文件名字 3.输入2, 进行多序列比对 4. ...
- opencv使用总结
在resize矩阵时出现报错 (-215) func != 0 in function cv::resize" 很可能是矩阵未设置为float,应该在读入后转换类型 item = item. ...
- SpringBoot关于SpringDataJpa中findOne()方法报错问题
问题描述: 首先用的SpringDataJPA的1.11版本,可以使用findOne()方法根据id查询 然后我使用了2.0.5版本,发现findOne()方法报错了,不能用来当作根据id查询了. 当 ...
- PHP 框架实现原理
一.MVC模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式. 控制器(Controller).负责转发请求,对请求进行处理. 视图(View).界面设计人员 ...
- 现代 PHP 新特性 —— Zend Opcache (转)
转自:https://laravelacademy.org/post/4396.html 1.概述 字节码缓存不是PHP的新特性,有很多独立的扩展可以实现,比如APC.eAccelerator和Xac ...
- spring reference
Spring框架概述 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创 ...
- 初识ldap
什么是LDAP? LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的, 但是简单多了并且可以根据需要定制.与 ...
- JVM中的垃圾回收器及垃圾收集算法描述
首先需要了解下JVM(Java虚拟机)中的内存分配情况: 收集器的介绍: Serial收集器:是最原始的收集器,是单线程的,实现简单,但是在后台收集垃圾的时候,其他的工作线程都会停止,直到垃圾收集线程 ...