概述
上一次说到了Java中的集合,并且说到集合中为保证数据读取的共性与各子类的个性,Collection选择了迭代器来处理这层关系。那么接下来我们就来看看迭代器。
首先是迭代器遍历对象集合的使用方法:
Iterator<AdminAllVo> iterable = adminAllVos.iterator();
while (iterable.hasNext()) {
System.out.print(iterable.next() + ",");
}
其它类型的集合也是同理。
Java中的迭代器是一个接口,名为:Iterator,它下面主要有两个抽象方法:hasNext与next。hasNext方法主要用于判断还没有数据可用于访问,next方法用来访问集合的下一个数据。
但是通过观察Collection的源码我们可以知道,它继承的并不是Iterator接口而是Iterable接口。
而我们在Iterable就可以找到Iterator的影子,这说明Iterable中也可以使用hasNext与next方法,那为什么Collection不直接选择继承Iterator接口呢?
这是因为无论是hasNext还是next都是基于当前迭代位置的,也就是说当有两个对象同时迭代一段数据时,前一个无论迭代到哪里,后一个就只能从当前位置开始迭代。如果前一个已经完成迭代,后一个直接就没有数据。
而Iterable中,无论何时都是返回的一个新的迭代器,且多个迭代器之间互不影响。
Iterable接口在Java中还有一个好处就是:如果你实现了Iterable接口并且按照要求返回了迭代器后,那么就可以使用for-each循环直接遍历数据。从而直接省略hasNext与next操作。这也是因为for-each本身实现用的也是迭代器。
总结:
- Iterable是接口,用于返回迭代器,实现该接口就算是可迭代对象,可以直接使用for-each循环访问数据。
- Iterator就是迭代器,用于遍历集合中的数据,并无需关心集合的内部实现。
-
for-each的实现,用的就是迭代器。
那么问题来了,如果返回迭代器后,又对数据进行了增删改,那不也会对迭代器的使用产生影响吗?Java标准库中又对这种情况进行怎样处理呢?
最后
以上就是无辜烧鹅为你收集整理的浅谈Java中的:迭代器的全部内容,希望文章能够帮你解决浅谈Java中的:迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复