Iterator如何与Collection Interface绑定

时间:2011-09-23 04:08:02

标签: java iterator

我是Java新手。

Java有Collection接口

public interface Collection<E> extends Iterable<E>
{ // a lot of other stuff. 
Iterator<E> iterator();  }

我不明白Iterator接口如何与收集接口捆绑?当我查看Collection Interface时,我发现它有一个返回Iterator的方法。当创建Iterator for Collection时,JVM在哪里创建一个IS-An Iterator对象? 谢谢!

3 个答案:

答案 0 :(得分:3)

JVM没有这样做;最终实现抽象iterator()方法的代码只是创建一个适当类的实例并返回它。例如,在实现扩展ArrayList()的{​​{1}}的类List中,有一个方法通过返回一个理解如何{{}的类的实例来实现Collection。 1}}在内部实施。这个iterator()类是ArrayList包的私有类 - 通常你永远不会看到它的名字。

答案 1 :(得分:2)

好的,所以这些都是非常先进的java东西,一次性解释很难,但我会尽我所能。

背景:如果您不了解那些有趣的<E>事物,那么您应该对Java Generics进行一些研究。此外,如果您还没有,您真的需要知道接口是什么。一种真正基本的思考方式就是承诺提供的功能。

现在回答你的问题:上面的代码片段中有三个接口,如果你想创建自己的集合类,你需要提供这三个接口的实现:

第一个是Collection。这是一个映射到现实世界的简单概念,它实际上是对象的“集合”。我想你明白了......

下一个是Iterable,它定义了所有集合需要提供的单一行为类型:遍历集合中所有元素的能力,同时逐个访问它们,即“迭代”它们。但它并不止于此。正如您所指出的,Iterable功能由实现最后一个接口的对象提供:

Iterator:实现此接口的对象,实际上知道如何遍历集合类的元素,它们隐藏了从客户端实际完成的所有细节,并证明了一些干净简单的实际操作方法它就像hasNext()一样检查集合中是否还有更多内容要访问,next()实际访问下一件事。

...

答案 2 :(得分:1)

iterator()方法的代码确定要返回的Iterator的具体实现。

实现Collection接口的所有非抽象类都需要为iterator()方法提供实现。