有没有便宜做网站的 我要做个,无法定位wordpress内容目录,福清建设局网站简介,部门网站建设个人总结迭代器模式迭代器模式又叫做游标(Cursor)模式#xff0c;其作用是提供一种方法访问一个容器元素中的各个对象#xff0c;而又不暴露该对象的内部细节。迭代器模式结构迭代器模式由以下角色组成#xff1a;1、迭代器角色负责定义访问和遍历元素的接口2、具体迭代器角色实现迭…迭代器模式迭代器模式又叫做游标(Cursor)模式其作用是提供一种方法访问一个容器元素中的各个对象而又不暴露该对象的内部细节。迭代器模式结构迭代器模式由以下角色组成1、迭代器角色负责定义访问和遍历元素的接口2、具体迭代器角色实现迭代器接口并要记录遍历中的当前位置3、容器角色负责提供创建具体迭代器角色的接口4、具体容器角色实现创建具体迭代器角色的接口这个具体迭代器角色与该容器的结构相关迭代器模式在JDK中的应用及解读迭代器模式就不自己写例子了直接使用JDK中的例子。为什么我们要使用迭代器模式思考一个问题假如我有一个ArrayList和一个LinkedList如何去遍历这两个List相信每个人都很清楚运行结果为这是因为恰好我们知道ArrayList和LinkedList的访问方式有些喜欢研究的人知道ArrayList和LinkedList的内部结构但如果现在我给你一个HashSet将如何遍历可能你还以为可以使用类似List的遍历方式不过很遗憾HashSet中根本没有提供get方法。这时候就轮到迭代器出场了不管是什么数据结构不管你听过还是没听过不管你见过还是没见过只要它实现了Iterable接口都可以用类似的方式去遍历我把ArrayList、LinkedList、HashSet的遍历写在一起看一下运行结果看到这就遍历出来ArrayList、LinkedList、HashSet了以后遇到一个集合只要实现了iterable接口也都可以类似这么遍历。这就是开头迭代器模式的定义说的开发者不需要知道集合中如何去遍历的细节只管用类似的遍历方法就好了。Iterable接口和Iterator接口这两个都是迭代相关的接口可以这么认为实现了Iterable接口则表示某个对象是可被迭代的Iterator接口相当于是一个迭代器实现了Iterator接口等于具体定义了这个可被迭代的对象时如何进行迭代的。参看Iterable接口的定义这样对象就可以使用这个类的迭代器进行迭代了一般Iterable和Iterator接口都是结合着一起使用的。为什么一定要实现Iterable接口而不直接实现Iterator接口了呢这个问题我也是在自己写了ArrayList和LinkedList的实现之后才想明白的这么做确实有道理因为Iterator接口的核心方法next()或者hasNext()都是依赖于迭代器的当前迭代位置的。如果Collection直接实现Iterator接口势必导致集合对象中包含当前迭代位置的数据当集合在不同方法间被传递时由于当前迭代位置不可预置那么next()方法的结果会变成不可预知的。除非再为Iterator接口添加一个reset()方法用来重置当前迭代位置。但即使这样Collection也同时只能存在一个当前迭代位置。而Iterable每次调用都返回一个从头开始计数的迭代器多个迭代器时互不干扰。可能这么解释不是很明白再解释明白一点我自己写的一个ArrayList如果直接实现Iterator接口那么势必是这么写的这么问题就来了如果一个ArrayList实例被多个地方迭代next()方法、hasNext()直接操作的是ArrayList中的资源假如我在ArrayList中定义一个迭代位置的变量那么对于不同调用处这个迭代变量是共享的线程A迭代的时候将迭代变量设置成了第5个位置这时候切换到了线程B对于线程B来讲就从第5个位置开始遍历此ArrayList了根本不是从0开始如何正确迭代实现Iterable接口返回一个Iterator接口的实例就不一样了我为自己写的ArrayList定义一个内部类每次都返回一个返回一个ArrayListIterator实例出去这就保证了即使是多处同时迭代这个ArrayList依然每处都是从0开始迭代这个ArrayList实例的。迭代器模式的优缺点优点1、简化了便利方式对于对象集合的遍历还是比较麻烦的对于数组或者有序列表我们还可以通过下标来获取但用户需要在对集合很了解的情况下才能自行遍历对象(有时即使你了解了集合还未必能直接遍历比如上面的HashSet就没有提供get方法)。而引入了迭代器方法后用户用起来就简单地多了2、可以供多种遍历方式比如对于有序列表可以正向遍历也可以倒序遍历只要迭代器实现得好3、封装性好用户只需要得到迭代器就可以遍历而对于遍历算法则不用去关心缺点对于比较简单的遍历(数组或者有序列表)使用迭代器方式遍历较为繁琐而且遍历效率不高使用迭代器的方式比较适合那些底层以链表形式实现的集合