- 浏览: 251126 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
rdsgf:
也就是导出。。。如何把生成的图片导出到本地,有没有接口?
报表 charts4j -
rdsgf:
你好,请问生成的图片如何保存到本地?
报表 charts4j -
刘焕杰:
楼主,为啥放进去后,我下载的中文文件名还是乱码呢?
[jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题 -
814687491:
Ext Panel 动态 加载 html -
yxyysu:
下载之后使用了,没有解决上传时中文名字乱码问题,请博主指导。
[jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题
有如下代码片段:
但是如果在遍历的过程中有remove()方法,则会报错
其实在使用foreach的时候系统采用如下方式解析:
关于Iterator的源码:
由此可以知道
java.util.ConcurrentModificationException
的报错原因是应为List在编译过程中修改了,不管是remove,add还是其他什么操作
正确的解决方案就是通过内置的删除方法
public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); // 依次输出结果 for (Integer integer : list) { System.out.println(integer); } }
但是如果在遍历的过程中有remove()方法,则会报错
for (Integer integer : list) { System.out.println(integer); if(integer.intValue() == 2){ list.remove(integer); } } Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(Unknown Source) at java.util.AbstractList$Itr.next(Unknown Source) at study.lgf.study.Foreach.main(Foreach.java:23)
其实在使用foreach的时候系统采用如下方式解析:
for (Iterator<Integer> iter = list.iterator(); iter.hasNext();) { Integer integer = iter.next(); System.out.println(integer); if(integer.intValue() == 2){ list.remove(integer); } }
关于Iterator的源码:
private class Itr implements Iterator<E> { // 当前指针位子 int cursor = 0; // iter.next(); 对应的值的位置 int lastRet = -1; // list.iterator() 时候List修改的次数 int expectedModCount = modCount; // 通过判断size和cursor来判断是否还有数据 public boolean hasNext() { return cursor != size(); } /** * 1. 判断是否被修改过,如果被修改过则直接报错 * 2. 获得当前下标对应的值 * 3. lastRet = cursor++; 保存当前位置,并且指向下一个 * 4. 返回获得的值 */ public E next() { checkForComodification(); try { E next = get(cursor); lastRet = cursor++; return next; } catch(IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } /** * 1. 直接移除当前位置的对象 * 2. 指针往后倒一位lastRet < cursor * 3. lastRet = -1; 当前位置已删除,如果再次移除则直接报错 * 4. expectedModCount = modCount; 同步修改次数 */ public void remove() { if (lastRet == -1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch(IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } } /** * 如果在遍历过程中发生变化,则直接报错 */ final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } }
由此可以知道
java.util.ConcurrentModificationException
的报错原因是应为List在编译过程中修改了,不管是remove,add还是其他什么操作
正确的解决方案就是通过内置的删除方法
/** * 通过iterator来遍历,可以正常删除 * 但是在遍历过程中不能对list进行编辑操作,否则会报错 */ for (Iterator<Integer> iter = list.iterator(); iter.hasNext();) { Integer integer = iter.next(); System.out.println(integer); if(integer.intValue() == 2){ iter.remove(); } } /** * 通过普通的for循环,在移除时候i--(remove时候所有数据向前移动一位) * 而且如果在遍历过程中使用add(i),也可以正常遍历到. * 但是如果list.add(index, element)则很容易出错 看index和i的关系 * 如果i>index则可能导致重复遍历一次,i<index.... */ for (int i = 0; i < list.size(); i++) { Integer integer = list.get(i); System.out.println(integer); if(integer.intValue() == 3){ list.remove(integer); i--; } } // 建议使用第一种,编译时候锁定list,不在对其进行编辑操作
发表评论
-
foreach的原理
2013-07-05 14:49 819... -
java.util.Properties 简单用法
2013-04-25 10:05 16001. 认识properties文件 1、properties文 ... -
while 和 for 不完全相同
2013-03-07 11:05 7711. for和while的语法如下: for(initi ... -
(a + (a++)) 与 ((a++) + a)
2013-03-04 09:46 861直接上代码: public static void mai ... -
java 发送邮件错误收集
2012-10-31 19:00 8041. 报错: Exception in thread &qu ... -
Add Deployment java.lang.NullPointerException
2012-08-22 17:28 33421. 在用Myeclipse部署项目时候突然报错: 无法 ... -
Undefined exploded archive location
2012-08-22 17:14 9371. 用Myeclipse部署web系统wlms时候报如下错误 ... -
java @override 报错处理
2012-07-25 16:17 806有时候在自己电脑上编译通过的java代码,在别人那里却编译不通 ... -
java 环境变量配置
2012-07-25 10:01 926windows xp下配置JDK环境变量: 1.安 ... -
java 源码解析--LinkedList
2012-03-13 14:20 1152LinkedList 1.看源码前应该知道的知识点 ... -
java 源码解析--ArrayList
2012-03-13 09:51 1306ArrayList 1.看源码前应该知道的知识点 / ... -
java 三大特性--封装、继承和多态理解
2012-03-12 15:21 3753封装 /** * 所谓封装,就是将对象具有的成员变量和 ... -
java 关键字 clone
2012-02-24 17:24 8331. 最简单的clone例子 /** * */ ... -
java 基础之(equals hashcode)
2012-01-19 11:02 10861.equals 的等价关系 2. ... -
java 基础之(接口)
2011-11-28 15:20 901“interface”(接口)关 ... -
java 基础之(抽象类)
2011-11-28 15:15 926抽象方法 :它属于一种不完整的方法, 只含有一个声明,没有方法 ... -
位移运算符
2011-11-04 11:46 930package com.lgf.operation; / ... -
java 关键字 final
2011-10-25 09:52 8611. final 数据 package com.lgf.k ... -
java 基础语法
2011-10-22 09:26 1077Java 基础语法 1.标识符 ... -
报表 charts4j
2011-10-18 09:32 30481. 简介 charts4j is a Java chart ...
相关推荐
Iterator遍历中 ConcurrentModificationException异常
NULL 博文链接:https://chenlinbo.iteye.com/blog/832335
java.util.ConcurrentModificationException 异常问题详解1
java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。 则使用会报以下异常: Java.util....
今天小编就为大家分享一篇关于Java源码解析ArrayList及ConcurrentModificationException,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了出现java.util.ConcurrentModificationException 问题及解决办法的相关资料,需要的朋友可以参考下
Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。
axis1.4补丁包,解决jdk1.8高并发报ConcurrentModificationException问题,该jar包重新编译jar包的一个class文件,线上环境通过
Spring数据mongodb测试 在Collections.synchronizedList或Collections.synchronizedSet上测试spring数据mongodb ConcurrentModificationException
axis1.4 spring3.0 集成 实现 web service 服务端, axis1.4 客户端认证,授权,访问日志记录,集成spring 解决 PHP 调用web service 无法认证,和解析soap 模板
fastJson的全部资料,包括源码、开发需要用到的jar包和html格式的文档。
这里面包含了大部分的软件测试的专业术语,希望对你有用
这时候我们就要用到Iterator,经常写程序的朋友应该都知道,在Iterator遍历的过程中,是不能够修改集合数据的,否则就会抛出ConcurrentModificationException。 因为ConcurrentModificationException的存在,就把...
java.util.ConcurrentModificationException: mutation occurred during iteration [error] scala.collection.mutable.MutationTracker$.checkMutations(MutationTracker.scala:43) [error] scala.collection....
可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之...
java中,List在遍历的时候,如果被修改了会抛出java.util.ConcurrentModificationException错误。 看如下代码: import java.util.ArrayList; import java.util.List; public class Resource3 { public ...
官方翻译:大小可变数组实现List接口的。 实现了所有可选列表操作,并允许所有元素,包括null。 除了实现List接口,此类提供方法来操作在内部用于存储列表中的阵列的大小。 (这个类是大致相当于矢量 ,除了它是不...
ConcurrentModificationException异常 线程安全的集合 线程安全的 List CopyOnWriteArrayList 线程安全的Set 线程安全的Map ConcurrentHashMap ConcurrentSkipListMap java集合 线程不安全的集合 HashMap的特点 ...