用List的迭代器遇到的错误
来源:互联网 发布:精雕软件下载 编辑:程序博客网 时间:2024/05/16 10:21
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
原因就是,我迭代找到元素后,直接从元素中删除,编译出错
解释:
/*
* Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说Iterator在工作的时候
* ,是不允许被迭代的对象改变的。Iterator被创建的时候,建立了一个内存索引表(单链表),
* 这 个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,
* 所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错 误。List、Set等是动态的,
* 可变对象数量的数据结构,但是Iterator则是单向不可变,
* 只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始数据发生变化时,Iterator自己就迷失了方向。
*/
解决方式:
如何才能满足需求呢,需要再定义一个List,用来保存需要删除的对象:
List delList = new ArrayList();
最后只需要调用集合的removeAll(Collection con)方法就可以了。
0 0
- 用List的迭代器遇到的错误
- List遇到的问题
- 今天遇到的错误
- 遇到的hibernate错误
- java遇到的错误
- java遇到的错误
- && ||遇到的错误
- 遇到的变态错误
- 编译遇到的错误
- 遇到的错误
- Spring遇到的错误
- wp 遇到的错误
- 今天遇到的错误
- 遇到的编译错误
- 遇到的spark 错误
- lucene遇到的错误
- git遇到的错误
- 遇到的错误
- 编程大赛编程大赛进入
- 操作系统经典书籍推荐
- Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
- js堆栈溢出错误
- CAN总线数据帧解码(示波器)
- 用List的迭代器遇到的错误
- apt-get 的常规用法
- 国内常用NTP服务器地址及IP
- 判断一个数是不是素数
- Java发邮件:Java Mail与Apache Mail
- 如何cp目录时忽略指定的目录和文件
- cocos2d-x CSV文件读取 (Excel生成csv文件)
- JMS与MQ详解
- 7种形式的Android Dialog使用举例