`

快速失败行为——迭代器的异常

 
阅读更多
关于迭代器的'快速失败行为'

快速失败行为是指某个线程在迭代Collection 的时候,通常不允许其他线程修改该Collection 的内容,因为这样迭代器迭代出来的结果就会不准确,如用iterator迭代collection的时候,iterator就是另外起的一个线程,它去迭代collection,如果此时用collection.remove(obj)这个方法修改了collection里面的内容的时候,就会出现ConcurrentModificationException异常,这时候该迭代器就快速失败。
如果要解决此异常的话,应该用iterator自带的remove方法去除当前的obj,如iterator.remove()。而不是使用collection.remove(obj)这个方法.
分享到:
评论

相关推荐

    C++与操作系统等面试题54

    迭代器模拟指针的行为,可以通过重载操作符来实现对容器的访问。每种容器都有自己的迭代器类型。 - **Random Access Iterator**:支持随机访问的迭代器,如`vector`和`deque`的迭代器。 - **Bidirectional ...

    试题5.doc————电子版_doc版

    - **迭代器模式**:Java集合框架中的Iterator接口,用于遍历集合元素。 - **适配器模式**:如XMLReaderAdapter,将不同接口间的不兼容性进行转换。 - **策略模式**:如FlowView类中的FlowStrategy,允许在运行时...

    捉虫历险记——常见C++Bug大围剿.rar

    9. **STL(Standard Template Library)容器使用不当**:如未正确理解和使用容器的迭代器,或者不遵循容器的操作规则,可能导致程序崩溃。 10. **标准库函数误用**:例如,不正确使用`std::vector`的`resize`、`...

    动态数组 自己写的 不知好不好 欢迎提点意见

    6. **迭代器支持**:为了与STL容器保持一致,自定义的动态数组类通常会提供迭代器接口,以便于遍历和操作数组元素。 在实现自定义动态数组时,需要注意以下几点: - **内存溢出**:在分配和释放内存时,确保不会...

    Java单元测试相关的两个jar包

    5. **测试规则**:测试规则(Test Rules)是JUnit 4的一个创新,允许我们定义测试执行前后的行为,比如`TestWatcher`可以实现测试失败时的额外处理。 而Hamcrest是另一个关键的Java匹配库,它的全名是“Hamcrest库...

    C++源码 MyPlayer.zip

    6. **标准模板库(STL)**:C++的STL包括容器(如vector、list、map)、算法和迭代器,它们极大地简化了数据结构和算法的实现。在播放器中,`std::vector`可能用于存储音视频帧,`std::map`用于管理媒体元数据。 7....

    C++ Primer Plus(第六版) 7-18章 习题答案

    这一章重点讲解了C++的标准模板库,包括容器(如vector、list、set等)、迭代器、算法和函数对象。STL极大地提高了代码的复用性和效率,是C++开发的重要工具。 第十二章:异常处理 异常处理是C++中处理程序运行时...

    C++精粹

    4. **STL(Standard Template Library)**:STL是C++标准库的一部分,包含了容器(如vector、list、map)、迭代器、算法和函数对象,为程序员提供了强大的数据结构和算法支持。 5. **异常处理**:C++的异常处理机制...

    生产管理系统.rar

    4. **STL(Standard Template Library)**:C++的STL提供了容器(如vector、list、map)、迭代器、算法等工具,大大简化了数据操作。在生产管理系统中,可能用到`std::vector`来存储产品库存,`std::map`来关联产品...

    libfuzzer-java,.zip

    4. **异常处理**:Java的异常处理机制需要与libFuzzer的崩溃检测机制相协调,以确保任何未被捕获的异常都能被视为测试失败。 5. **测试用例存储**:libFuzzer会保存导致新覆盖边的输入作为种子,以便后续迭代中继续...

    java经典面试.txt

    它们没有名称,是在定义时立即创建的,通过扩展现有类或实现接口的方式,可以在不创建新类的情况下快速定义特定行为。 #### Static Nested Class与Inner Class的区别 Java中的静态嵌套类(Static Nested Class)和...

    Python初学教程:《简明Python教程》

    - 断言失败时会引发`AssertionError`异常。 - **repr函数**: - 返回对象的字符串表示形式。 - 通常用于调试。 #### 16. **接下来学习什么?** - **图形软件**: - Python有许多库支持图形界面应用程序的开发...

    Java面试宝典

    - 迭代器是一种设计模式,用于遍历集合中的元素,提供了一系列方法如`hasNext()`和`next()`。 4. **`Iterator`与`ListIterator`的区别** - `Iterator`只能向前遍历集合。 - `ListIterator`不仅可以向前遍历,还...

    编程修养,是关于写C程序的

    未初始化的变量值通常是不确定的,使用它们可能导致程序行为异常甚至崩溃。正确的初始化不仅可以避免这类问题,还能提升代码的健壮性。 #### 10、h和c文件的使用 将函数声明放在.h文件中,实现细节放在.c文件中,是...

    PWscf用户手册

    - 介绍了如何执行 Car-Parrinello 分子动力学模拟,以研究材料在特定条件下的动力学行为。 - 包括设置温度、压力等外部条件的方法。 - **高级用法** - 提供了一些高级功能的使用方法,如自交互校正、系综 DFT 等...

    c#学习笔记.txt

    在C#刚刚推出的时候,大多数的程序员都不免吼上两句——不是因为高兴,而是因为又多了一种语言。他们觉得现在的语言太多了,没有必要再多出一种来添乱子。但是当他们看完C#的文档后又开始高兴起来,因为C#是如此简单...

    【05-面向对象(下)】

    •接口定义的是多个类共同的行为规范,这些行为是与外部交流的通道,这就意味着接口里通常是定义一组公用的 方法。 •接口体现了规范与实现分离的设计。 接口的定义 •和类定义不同,定义接口不再...

Global site tag (gtag.js) - Google Analytics