说说 Java 迭代器

Java 迭代器是一个对象,它在一个序列中单向移动并可操作该序列中的每个元素对象。

1 基本用法

除了单向移动这个特性之外,还包含了获取、检查与移除元素的 API 方法。

有了这些 API 方法,我们就可以迭代集合中的元素。


代码示例中,首先通过 iterator() 方法返回迭代器对象,然后检查、获取集合中的元素。

如果需要修改集合中的元素,那么可以先调用 next(),然后再修改这个元素。

如果只是想遍历 List ,并不打算修改或删除 List 对象中的元素,那么使用 for-in 语法会让代码看上去更加简洁。

2 反向遍历

除了传统的正向遍历之外,使用 ListIterator 还可以支持反向遍历。

ListIterator 提供了用于反向遍历的 API,比如获取、检查上一个元素,返回上一元素检索值等等:

利用这些 API 方法就可以实现前向或后向遍历咯:


3 for-in 语法

for-in 语法主要用于数组,但也可用于任何 Collection 对象,因为它们实现了 Iterable 接口。

Iterable 接口包含了一个能够生成 Iterator 的 iterator() 方法。for-in 语句就是使用这个 Iterable 接口来遍历序列。所以,任何实现了 Iterable 接口的类,都可以用于 for-in 语句。

Bruce Eckel 举了这样一个示例,来说明自定义的 Iterable 接口的类可以用于 for-in 语句:

通过实现不同规则的 Iterable,就可以定义不同的迭代规则。

逆序规则:


随机规则:


4 Iterator和Iterable的区别

Iterator是迭代器对象,是集合进行迭代遍历的底层依赖。而Iterable接口内部定义了返回Iterator对象的方法,实际上封装了 Iterator对象。

下面这段是Iterable接口的定义源代码:


为何不直接将hasNext(),next()方法等遍历方法设计在Iterable接口中?
因为有些集合类可能需要多种遍历方式,比如 LinkedList 就设计了 ListItr 与 DescendingIterator 方法分别用于实现双向遍历和逆序遍历。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容