[英]Questions about Iterator Interface
我正在研究 Java.util 包的基本接口和类。 现在接口 Set 是 Collection 和 Iterable 的子类,所以 Set 有 Iterator 模块。 那么为什么我使用迭代器接口的引用呢?
Iterator<String> iterx = x.iterator();
Iteratr 也是一个接口。 但是我没有看到有关 Iterable 接口和 Iterator 接口的任何关系。 Iterable 有一个名为 Iterator 的模块。 写起来不会更正确
Iterable.Iterator iterx = x.iterator();
因为 x.iterator 调用的是 Iterable 继承的 Set 的 moudle,而不是调用 Iterator 接口。
我有什么不明白的?
Iterable 接口表示特定的 Collection 是可迭代的,这意味着您可以使用 Iterator 对其进行迭代。
它只有一种方法,即 iterator() 返回一个 Iterator。 任何集合,例如实现 Iterable 的 List 都提供了 iterator() 方法的实现。
Iterator 也是一个接口,它定义了迭代过程,它提供了 next()、hasNext() 和 remove() 方法,可用于控制迭代、访问元素并删除它。
您使用Iterator<String>
的原因与在其中使用String
原因相同
String stringx = x.toString()
该方法(“模块”的正确名称)声明它返回一个该类型的对象。 方法可以返回任何不相关的类型,您必须调整和使用它们给您的变量类型。
Iterator
在概念上与Iterable
相关,但它们并不相互继承。 实际上, Iterator
允许您访问与生成它的Iterable
相同的数据,这实际上只是约定。
但是Iterator
的设计/约定是,您可以在迭代器的生命周期中对项目集合进行一次迭代(重复hasNext()
?好的给next()
!一遍又一遍,直到没有下一个。)。 如果你想再次迭代,你必须得到一个新的Iterator
。 这就是Iterable
的责任:它可以在您每次询问时生成一个新的Iterator
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.