首页 > 代码库 > 迭代器模式
迭代器模式
Iterator:我们先来看一下这个接口,实际上的抽象方法就2个,hasNext和next
package java.util; import java.util.function.Consumer; public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } }
1、hasNext是用于判断是否有下一个元素,看到这个方法,大家应该也知道Iterator接口是用于什么样的数据了--集合|数组类型
2、next是用于获取下一个元素的方法
这两个方法组成了这样的调用方式:
while(iterator.hasNext()) { Object one = iterator.next(); one.action(); }
它不像js中的调用方式
$("a").each(function(obj) { obj.action(); })
js采用的是传入回调函数,通过调用回调函数的方式来遍历集合执行动作
所以我们把js的这种方式称为:内部迭代器
特点也很明显
内部迭代器需要集合支持传入回调函数
而且无法在操作的过程中直接中断操作等
并且会引入闭包问题,即在内部迭代器中调用当前上下文变量的问题
所以在使用中,倾向于灵活的外部遍历,或者倾向于简单的内部遍历,见仁见智
迭代器的设计意图经过上述的例子,也比较清晰了
使得不同的集合类型,可以用相同的方式来遍历
迭代器模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。