关于迭代器接口的问题
Posted
技术标签:
【中文标题】关于迭代器接口的问题【英文标题】:Questions about Iterator Interface 【发布时间】:2016-01-10 04:30:18 【问题描述】:我正在研究 Java.util 包的基本接口和类。现在接口 Set 是 Collection 和 Iterable 的子类,所以 Set 有 Iterator 模块。那么为什么我使用迭代器接口的引用呢?
Iterator<String> iterx = x.iterator();
Iteratr 也是一个接口。但我没有看到关于 Iterable 接口和 Iterator 接口的任何关系。 Iterable 有一个名为 Iterator 的模块。写起来不会更正确
Iterable.Iterator iterx = x.iterator();
因为x.iterator调用了Set已经被Iterable继承的模块,而不是调用Iterator接口。
我有什么不明白的?
【问题讨论】:
不确定您在问什么,但您写入代码的限定类名 (java.lang.Iterable
) 与继承无关。
迭代器方法(结果类型为Iterator
)是实现Iterable
的类必须提供的。
【参考方案1】:
Iterable 接口表示特定的 Collection 是可迭代的,这意味着您可以使用 Iterator 对其进行迭代。
它只有一个方法,就是iterator()返回一个Iterator。任何集合,例如实现 Iterable 的 List 提供了 iterator() 方法的实现。
Iterator也是一个定义迭代过程的接口,它提供了next()、hasNext()和remove()方法,可以用来控制迭代,访问元素和删除元素。
【讨论】:
是的,但是如何将 Iterator 接口与我的对象通信? Iterator 接口和 Iterable 接口没有任何关系。 iterable 不应该调用迭代器接口吗? 像ArrayList一样创建一个内部类来实现Iterator【参考方案2】:您使用 Iterator<String>
的原因与您在中使用 String
的原因相同
String stringx = x.toString()
方法(“模块”的正确名称)声明它返回一个该类型的对象。方法可以返回任何不相关的类型,你必须调整和使用它们给你的变量类型。
Iterator
在概念上与Iterable
相关,但它们不会相互继承。实际上,Iterator
授予您访问与生成它的Iterable
相同的数据的权限。
但Iterator
的设计/约定是,您可以在迭代器的生命周期内迭代一次 遍历项目集合(重复hasNext()
?好的,给next()
!直到没有下一个。)。如果你想再次迭代,你必须得到一个新的Iterator
。这就是Iterable
的责任:每次你问它,它都能产生一个新鲜的Iterator
。
【讨论】:
以上是关于关于迭代器接口的问题的主要内容,如果未能解决你的问题,请参考以下文章