Iterator 迭代 警惕 java.util.ConcurrentModificationException异常

发布时间:2014-10-22 14:34:56编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Iterator 迭代 警惕 java.util.ConcurrentModificationException异常",主要涉及到Iterator 迭代 警惕 java.util.ConcurrentModificationException异常方面的内容,对于Iterator 迭代 警惕 java.util.ConcurrentModificationException异常感兴趣的同学可以参考一下。

List list = new ArrayList(); for(Iterator iter = list.iterator(); iter.hasNext();) { Object obj = iter.next(); ... if(***) { list.remove(obj); } } 在执行了remove方法之后,再去执行循环,iter.next()的时候,报java.util.ConcurrentModificationException(当然,如果remove的是最后一条,就不会再去执行next()操作了 异常原因: Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。 所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。


上一篇:联合主键配置
下一篇:iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款