一、Collection 接口的iterator()方法返回一个 Iterator。Iterator接口方法能以迭代方式逐个访问集合中各个元素,并安全的从Collection 中除去适当的元素。
(1) boolean hasNext():
判断是否存在另一个可访问的元素
Object next():
返回要访问的下一个元素。如果到达集合结尾则抛出NoSuchElementException异常
(2) void remove():
删除上次访问返回的对象。本方法必须紧跟在一个元素的访问后执行。如果上次访问后合已被修改,方法将抛出IllegalStateException。
二、快速失败
“Iterator中删除操作对底层Collection也有影响。”迭代器是 故障快速修复(fail-fast)的。这意味着,当另一个线程修改底层集合的时候,如果您正在用 Iterator 遍历集合,那么,Iterator就会抛出 ConcurrentModificationException (另一种 RuntimeException异常)异常并立刻失败
三、与枚举的区别
对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:
- 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
- 方法名称得到了改进。
四、异常
remove
void remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
抛出:
UnsupportedOperationException
- 如果迭代器不支持 remove 操作。
IllegalStateException
- 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法。
分享到:
相关推荐
这涉及到两种类型的迭代器:Fail-fast和Fail-safe。 ### Fail-fast Iterator Fail-fast Iterator是一种快速响应集合修改的机制。如果在遍历过程中,集合的结构被修改(例如添加、删除元素或改变元素位置),Fail-...
4. **迭代器的`remove()`方法**:在使用迭代器删除元素时,使用`iterator.remove()`而不是直接调用集合的`remove()`方法,可以避免抛出`ConcurrentModificationException`,因为迭代器的`remove()`方法会更新`...
fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所...
### Iterator迭代器详解 #### 一、Iterator简介与概念 在Java编程语言中,`Iterator`接口是一个重要的组件,它提供了遍历集合的基本方法。`Iterator`的主要作用是在不暴露集合内部结构的情况下,顺序访问集合中的...
Fail-Fast机制的原理是,当迭代器在遍历集合时,如果集合的结构发生了改变,迭代器将抛出ConcurrentModificationException异常。这是因为迭代器无法确保在遍历过程中集合的结构不变。 在Java的Collection框架中,...
使用迭代器的另一个关键特性是快速失败(Fast-Fail)机制。当多个线程同时遍历一个集合并修改集合状态时,如果没有适当的同步控制,可能会导致迭代器抛出ConcurrentModificationException。这是因为迭代器在创建时会...
- HashMap 的迭代器(Iterator)是 fail-fast 的,这意味着如果在遍历过程中有其他线程修改了 HashMap(除了迭代器自身的 `remove()` 方法),迭代器将抛出 ConcurrentModificationException。 - 而 Hashtable 的 ...
13. **通过迭代器fail-fast属性,你明白了什么?** 当集合在迭代过程中被修改,除了通过迭代器自身的remove()方法,fail-fast机制会抛出ConcurrentModificationException,以防止数据不一致。 14. **fail-fast与...
需要注意的是,Iterator接口和ListIterator接口的实现需要遵循一定的规则,例如,Iterator接口的实现需要遵循Fail-Fast策略,即,如果集合在迭代期间被修改,将抛出ConcurrentModificationException异常。...
3. Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中其它线程修改),程序立即引发 ConcurrentModificationException 异常,而不是显示修改后的结果,这样...
fail-fast 和 fail-safe 迭代器是 Java Collections 框架中的两种迭代器模式。fail-fast 迭代器在集合修改时,会抛出 ConcurrentModificationException 异常。fail-safe 迭代器在集合修改时,会返回当前集合的快照。...
迭代器的使用遵循“fail-fast”原则,即如果在迭代过程中修改了集合,迭代器会抛出`ConcurrentModificationException`。 现在,让我们分析给定的文件`First.java`和`Student.java`。假设`First.java`是主程序,它...
3. **Fast-Fail Exception**: 当检测到集合被修改后,迭代器会抛出`ConcurrentModificationException`异常。这表明当前的遍历过程不再安全,应该停止进一步的操作。 #### 七、示例分析 假设有一个`ArrayList`实例`...
7. **fail-fast和fail-safe**:fail-fast迭代器(如ArrayList和HashSet的迭代器)在检测到集合结构被修改时会抛出ConcurrentModificationException。而fail-safe迭代器(如CopyOnWriteArrayList的迭代器)可以在多...
由于`Iterator`的`fail-fast`特性,它在单线程环境中提供了安全性保证,但在多线程环境中,如果需要在遍历的同时修改集合,需要采取额外的同步措施。另一方面,`Enumeration`不支持`fail-fast`,因此在多线程环境下...
遍历时,迭代器会检查这个计数器是否有变化,如果有变化则抛出异常。 - **Fail-safe**:某些集合如`ConcurrentHashMap`和`CopyOnWriteArrayList`提供了一种线程安全的遍历机制,即使遍历过程中集合被修改也不会抛出...
- HashMap的迭代器(Iterator)是fail-fast的,如果在迭代过程中修改了HashMap,迭代器会抛出ConcurrentModificationException;而HashTable的 enumerator没有fail-fast机制。 - 自Java 1.5起,HashMap提供了更丰富...
快速失败(Fail-Fast)迭代器机制是指在用迭代器遍历集合的过程中,如果检测到集合在迭代过程中被修改了,就会迅速抛出ConcurrentModificationException异常。快速失败机制的迭代器是为单线程设计的,因为它们不能...