`
jonsvien
  • 浏览: 11540 次
  • 性别: 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体中的所有类都有这个问题。每一次目标对象状态改变后,都要重新来获取新的迭代器对象。伙伴们小心
分享到:
评论

相关推荐

    java8.pdf详细说明java8的使用说明

    它们在Java中引入了函数式编程的元素,比如可以在集合类中用于迭代、排序、映射等操作。Lambda表达式提供了一种书写代码更加简洁易读的方式。 3. 方法引用(Method References): 方法引用是对Lambda表达式的...

    Java综合实验---学生信息管理系统

    在本实验中,我们主要关注的是Java编程的...通过这个实验,你可以深入理解Java的面向对象特性,掌握如何使用集合、泛型、IO流和多态等核心概念,同时增强对异常处理的理解。这对于成为一名合格的Java程序员至关重要。

    示例iterator使用及技巧

    - 使用`Iterator`遍历集合时,应确保在调用`next()`方法之前调用`hasNext()`方法,以避免`NoSuchElementException`异常。 - 对于`List`集合,可以考虑使用`ListIterator`以获得更多的功能。 通过以上内容的介绍,...

    java集合类遍历的同时如何进行删除操作.docx

    尽管使用了迭代器,但由于在`hasNext()`和`next()`之间调用了`remove()`,同样会抛出异常,因为这不是迭代器协定允许的方式。 - **操作4**:正确操作:创建迭代器,然后在`hasNext()`和`next()`之间调用迭代器的`...

    java 学习PPT课件

    18. **Java集合高级**:TreeSet、TreeMap、LinkedHashMap等集合类的特性,以及集合框架中的迭代器和比较器。 19. **Java网络编程**:Socket编程,ServerSocket的使用,以及基于HTTP协议的网络通信。 20. **Java...

    疯狂Java讲义代码

    代码中会有ArrayList、LinkedList、HashMap、HashSet等集合类的使用示例,以及泛型、迭代器和 Lambda 表达式等现代Java特性。 4. **异常处理**:Java的异常处理机制是程序健壮性的重要保障。代码会展示如何使用try-...

    DVD管理器源码JAVA初学者学习项目

    你还会学习到如何使用迭代器或者for-each循环来处理集合中的元素。 再者,项目中很可能会包含控制台用户界面,使用Scanner类来获取用户输入,并输出相应的信息。这涉及到IO流和控制台交互的知识,是Java标准库的...

    python基础3day04.txt

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

    java5压缩文件

    这个压缩文件“java5压缩文件”包含了JDK 1.5的安装程序(jdk1.5.exe)以及一份使用说明(使用说明.txt)。JDK 1.5,也称为Java SE 5.0,引入了许多新特性,改进和优化,极大地提升了开发者的工作效率和代码质量。 ...

    java教程21天速成

    - **迭代器**:掌握迭代器的遍历方式,以及foreach循环的应用。 4. **异常处理** - **异常概述**:理解什么是异常,何时抛出异常,以及异常处理的结构(try-catch-finally)。 - **自定义异常**:学习如何创建和...

    JAVA API字典

    此外,还有泛型、迭代器、比较器等功能,增强了代码的灵活性和可读性。 3. **I/O流**:Java的I/O流系统允许读写文件、网络通信以及处理数据流。InputStream和OutputStream是所有字节流的基类,而Reader和Writer则...

    Java大学教程源码.rar_college_java sound_java 教程 源代码_java大学教程_sound

    源代码会展示如何使用这些集合,以及如何实现迭代器、泛型等高级特性。 5. **输入/输出流**:Java的I/O流用于读写数据,包括文件操作、网络通信等。源码中可能有FileInputStream、FileOutputStream、BufferedReader...

    Java核心技术笔记

    此外,泛型、迭代器、比较器等也是集合框架的重要组成部分。 以上这些内容是Java开发者必须掌握的基础知识,对于深入理解和应用Java技术至关重要。通过深入学习和实践,开发者能够构建出高效、稳定且易于维护的Java...

    必备的Java面试宝典

    理解它们的区别、特点及使用场景,还需了解泛型、迭代器和Comparable接口。 4. **多线程**:Java提供了多种创建线程的方式,如Thread类和Runnable接口。理解线程的状态、同步机制(synchronized关键字、wait/notify...

    Java编程基础PPT

    11. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及迭代器的遍历方式。 12. **多线程**:线程的创建方式(通过实现Runnable接口或继承Thread类),线程同步机制(synchronized关键字...

    Java理论与实践再研究.pdf

    文件概述了设计模式的基本概念和如何在Java程序设计中应用基本的设计模式,如单例模式、工厂方法、值对象、DAO模式、责任链模式和迭代器模式。 最后,文件探讨了学习Java的方法和思考方式,强调了认识事物的一般...

    《Java开发手册(嵩山版)》.pdf

    此外,手册还关注集合的遍历方式,提倡使用迭代器而非for-each循环,以及避免修改正在遍历的集合,以防止并发修改异常。 异常日志部分,手册鼓励精确捕获和处理异常,避免使用笼统的catch块,确保异常信息的完整...

    java基础语法.pdf

    16. **集合框架**:包括ArrayList、LinkedList、HashMap等容器类,以及迭代器和泛型的使用。 17. **多线程**:Java支持多线程编程,讲解如何创建线程、同步和互斥。 18. **注释**:介绍单行、多行和文档注释的使用...

    JAVA实例编程100例3

    这个实例可能演示了如何创建和操作这些集合,以及如何使用迭代器遍历元素。 7. **实例87**:可能是一个关于网络编程的例子,使用`java.net`包中的Socket或ServerSocket类进行TCP/IP通信。 8. **实例81**:可能涉及...

Global site tag (gtag.js) - Google Analytics