`
jonsvien
  • 浏览: 11256 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java迭代器使用异常说明

阅读更多
JAVA程序员不可不用的集合操作,但是很多时间大家是否注意过其中的问题,最近又回到了基础中,学习JAVASE中基本知识。当有过一段工作时间后,再回头看看基础的知识,往往会有更深入的了解。

总结小知识点如下


在集合的使用过程中,有时候我们选择迭代器操作。
一般处理方式如下

LinkedList<Object> linkedList = new LinkedList<>();
		linkedList.add("2");
		linkedList.add("3");
		linkedList.add("4");
		linkedList.add("5");
		System.err.println(linkedList.toString());
		Iterator<Object> iterator = linkedList.iterator();
		boolean hasNext = iterator.hasNext();
		if(hasNext){
			iterator.next();
		}


但是如果在你在获取迭代器对象后,又使用linkedList对象操作了数据,那么下一次再使用迭代器时就会出错了。
增加如下代码,如进行如下操作:

linkedList.add("vv");
hasNext = iterator.hasNext();
if(hasNext){
iterator.next();
}


接上面的代码后,再向linkedList中加入一个"vv",然后再使用原来的迭代器获取。
报错如下:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:953)
	at java.util.LinkedList$ListItr.next(LinkedList.java:886)
	at org.test.Test.main(Test.java:29)

因为当前的迭代器状态是基于之前状态的linkedList,所以此时的迭代器不能够操作状态发生改变的集合。当linkedList中的数据发生改变时,只有重新再获取一次迭代器,才可以操作状态更改后的linkedList。只要是Iterator体中的所有类都有这个问题。每一次目标对象状态改变后,都要重新来获取新的迭代器对象。伙伴们小心
分享到:
评论

相关推荐

    python基础3day04.txt

    day03回顾 包  __init__.py __all__ 列表 from import * 相对导入 ... next(iterator) 从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration 异常 说明: 迭代器是访问

    JavaLearning:我对Java的学习

    JDBC在Java中使用JDBC Java进阶注解退货虚拟机 Java基础根据日历推荐jdk1.7 LocalDate之后的日期数学随机的字符串StringBuilder馆藏了解结构arraylist链表hashmap哈希集和迭代器类加载器了解类加载器例外处理异常,...

    Python岗位常规面试题.pdf

    请说明在Python中如何自定义迭代器。 4. 什么是Python中的闭包(Closure)?请举例解释在Python中如何使用闭包。 5. 请解释Python中的多线程和多进程的区别,以及如何在Python中实现多线程和多进程。 6. Python中的...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    Ruby常见面试题.pdf

    9. 什么是Ruby中的块(Block)和迭代器(Iterator)?请简要介绍在Ruby中块和迭代器的概念。 10. 在Ruby中如何进行模块(Module)和类(Class)的定义?请说明在Ruby中模块和类的创建方法。 11. 什么是Ruby中的符号...

    python面试题合集.pdf

    请谈谈 Python 中的生成器(Generator)和迭代器(Iterator)的区别以及如何使用。 - 5. 什么是 Python 的模块(Module)和包(Package)?请说明模块和包在 Python 中的作用和组织方式。 - 6. 请解释一下 Python ...

    突破程序员基本功的16课.part2

    3.4 Iterator迭代器 迭代时删除指定元素 3.5 小结 第4课 Java的内存回收 4.1 Java引用的种类 4.1.1 对象在内存中状态 4.1.2 强引用 4.1.3 软引用 4.1.4 弱引用 4.1.5 虚引用 4.2 Java的内存泄漏 4.3 垃圾...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    C6.1.2 使用迭代器操作 482 C6.1.3 实现迭代器 483 C6.2 迭代器的高级功能 485 第17章 堆 489 17.1 ADT堆 490 17.2 堆的基于数组的实现 493 17.2.1 基于数组的堆操作的算法 494 17.2.2 实现 498 17.3 ADT...

    Guava 16.0 API (CHM格式)

    实现迭代器? 我们可以更容易使用这些方法。  三. 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。  四. Functional idioms(函数式): 简洁, Guava实现了Java的函数式编程,可以...

    C++大学教程,一本适合初学者的入门教材(part2)

    20.1.2 迭代器简介 20.1.3 算法简介 20.2 顺序容器 20.2.1 vector顺序容器 20.2.2 1ist顺序容器 20.2.3 deque顺序容器 20.3 关联容器 20.3.1 multiset关联容器 20. 3.2 set关联容器 20.3.3 mdtimap...

    C++大学教程,一本适合初学者的入门教材(part1)

    20.1.2 迭代器简介 20.1.3 算法简介 20.2 顺序容器 20.2.1 vector顺序容器 20.2.2 1ist顺序容器 20.2.3 deque顺序容器 20.3 关联容器 20.3.1 multiset关联容器 20. 3.2 set关联容器 20.3.3 mdtimap...

    软件设计师重点考点

    1.4中央处理器CPU 15 1.5 输入/输出系统 17 1.6 计算机总线结构 19 1.7 体系结构其他的知识 19 1.8 计算机的安全、可靠性评价 *&lt;软件设计师&gt; 24 1.9 数学基础知识 28 1.9.1命题逻辑的基础知识 28 1.9.2 谓词逻辑、...

    【05-面向对象(下)】

    我们把该类的构造器使用Private修饰,从而把该 类的所有构造器隐藏起来。  –2.则需要提供一个public方法作为该类的访问点,用于创建该类的对象,且必须使用static修饰  –3.该类还必须缓存已经创建的对象,必须...

    hibernate3.04中文文档.chm

    符合Java习惯的关系数据库持久化 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·举例说明如何使用mfc开发本地windows应用程序  ·指导读者用c++和c++/cli设计和创建大量的windows应用程序  ·为帮助读者掌握编程技巧,提供了大量可运行的示例和练习 作译者  Ivor Horton是撰著Java、C...

    遗传算法与粒子群算法的实现

    AbstractSwarm.java各种拓扑结构的PSO种群的抽象父类,主要实现了种群迭代过程中计算流程的定义以及中间数据被如何输出到测试工具类。 Domain是PSO算法求解中所有问题域必须实现的接口。 DynamicFatorGenerator若...

    asp.net知识库

    C#2.0-迭代器 C#2.0 的新增功能学习 泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: ...

Global site tag (gtag.js) - Google Analytics