Iterator迭代器

简介: Iterator接口共包含4个方法:public interface Iterator { E next(); boolean hasNext(); void re...

Iterator接口共包含4个方法

public interface Iterator<E> {
    E next();
    boolean hasNext();
    void remove();
    default void forEachRemaining(Consumer<? super E> action){};
}

1. 反复调用next()方法就可以逐个的遍历集合中的元素,如果在集合末尾调用next()方法就会抛出NoSuchElementException异常

2. 为了防止抛出这样的异常,我们在利用Iterato遍历集合元素时需要将next()和hasNext()配对使用,每次在调用next()方法迭代下一个元素时,应该先调用hasNext()方法检查是否存在下一个元素

3. 在Java SE 8中,甚至不用写循环。可以调用forEachRemaining()方法并提供一个lambda表达式。将对迭代器的每一个元素调用这个lambda表达式,直到没有元素

iterator.forEachRemaining(element -> /*do something with element*/);

4. 元素被访问的顺序取决于集合类型,如果对ArrayList进行迭代,迭代器将会从索引 0 开始,每迭代一次索引值加 1。然而,如果访问HashSet中的元素, 每个元素将会按照某种随机顺序次序出现。虽然可以确定在迭代过程中能够遍历到集合中的每一个元素,但却无法预知元素的访问次序

5. Java与C++的迭代器有本质区别。在C++中,迭代器是根据数组索引建模的,可以直接根据索引查找指定位置的元素。但是,Java中的迭代器不是如此,查找一个元素的唯一方法是next()方法,而且 Java 的迭代器在集合上顺序移动。可以将 Java 迭代器认为是位于两个元素之间,当调用next()方法时,迭代器越过下一个元素,并返回当前元素
这里写图片描述

6. next方法与 remove方法具有相互依赖性,如果调用remove之前没有调用next将会是不合法的。

iterator.remove();
iterator.remove();  //Error!
//不能连续删除,必须先将iterator移向下一个元素

iterator.remove();
iterator.next();
iterator.remove();  //OK!
目录
相关文章
|
1月前
Iterator与ListIterator迭代器
Iterator与ListIterator迭代器
|
6月前
每日一道面试题之迭代器 Iterator 是什么?
每日一道面试题之迭代器 Iterator 是什么?
|
2月前
|
算法 C++ 容器
c++迭代器介绍
C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。
39 0
|
3月前
自己实现iterator迭代器
自己实现iterator迭代器
|
4月前
|
Java
Java集合框架:什么是迭代器(Iterator)?
Java集合框架:什么是迭代器(Iterator)?
23 0
|
5月前
|
设计模式 Java Python
迭代器(Iterator)
迭代器(Iterator)是一种设计模式,用于遍历聚合对象的一种方法。迭代器提供了一种方法来访问聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式在 Java 和 Python 等编程语言中广泛使用,可以用于处理列表、元组、集合等数据结构。
36 1
|
10月前
|
索引 容器
Iterator与ListIterator有什么区别
Iterator与ListIterator有什么区别
|
JavaScript 前端开发 Java
彻底理解 for of 和 Iterator
本文主要来说下ES6的Iterator,目的在于理解它的概念、作用、以及现有的应用,最后学以致用。 Iterator可以说是ES6内相当重大的一个特性,也是很多其他特性运行的基石。 为什么Iterator地位如此之高呢?
91 1
彻底理解 for of 和 Iterator
|
算法 搜索推荐 C++
C++迭代器 iterator详解
C++迭代器 iterator详解
276 0
C++迭代器 iterator详解