本文共 937 字,大约阅读时间需要 3 分钟。
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 方法分别用于实现双向遍历和逆序遍历。转载地址:https://deniro.blog.csdn.net/article/details/108296019 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!