我是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对象? 谢谢!
答案 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()方法提供实现。