我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?
当前回答
最重要的考虑是所讨论的项是否应该能够多次遍历。这是因为你总是可以通过再次调用iterator()来倒带一个Iterable,但是没有办法倒带一个iterator。
其他回答
假设有10个苹果。 当它实现Iterable时,就像把每个苹果放在从1到10的盒子里,并返回一个可用于导航的迭代器。
通过实现迭代器,我们可以得到任何apple, apple in next boxes等等。
实现iterable提供了一个迭代器来导航它的元素,尽管要导航,迭代器需要被实现。
最重要的考虑是所讨论的项是否应该能够多次遍历。这是因为你总是可以通过再次调用iterator()来倒带一个Iterable,但是没有办法倒带一个iterator。
我知道这是一个老问题了,但是对于任何读到这篇文章的人来说,如果他们被同样的问题所困扰,并且可能被所有的术语所淹没,这里有一个很好的,简单的类比来帮助你理解迭代对象和迭代器之间的区别:
想想公共图书馆。旧的学校。用纸质书。是的,就是那种图书馆。
满满一书架的书就像一个可迭代对象。你可以看到书架上有一长排的书。你可能不知道有多少本书,但你可以看到这是一本很长的书集。
图书管理员就像迭代器一样。他可以在任何时候指出一本书。他可以在他所指向的位置插入/删除/修改/阅读书籍。每次你对着他喊“下一本!”时,他就依次指着每一本书。所以,你通常会问他:“有下一本书吗?”,他会说“有”,你说“下一本书!”,他会指向下一本书。他也知道什么时候他已经到了书架的尽头,所以当你问:“有下一个吗?”他会说“没有”。
我知道这有点傻,但我希望这能有所帮助。
基本上来说,这两者都是密切相关的。
将Iterator视为一个接口,它帮助我们在一些未定义的方法(如hasNext(), next()和remove()的帮助下遍历集合。
另一方面,Iterable是另一个接口,如果由类实现,则强制该类为Iterable,并且是for - each构造的目标。 它只有一个名为iterator()的方法,该方法来自iterator接口本身。
当一个集合是可迭代的,那么它可以使用迭代器迭代。
为了了解,请访问以下内容:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
迭代器http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
实现Iterable接口允许一个对象作为foreach语句的目标。
class SomeClass implements Iterable<String> {}
class Main
{
public void method()
{
SomeClass someClass = new SomeClass();
.....
for(String s : someClass) {
//do something
}
}
}
Iterator是一个接口,它具有迭代元素的实现。Iterable是一个提供迭代器的接口。
推荐文章
- 如何在java中格式化持续时间?(如格式H:MM:SS)
- urlencoder .encode(字符串)已弃用,我应该使用什么代替?
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?