您的位置:首页 > 游戏 > 手游 > 设计模式之迭代器模式

设计模式之迭代器模式

2024/12/24 8:23:45 来源:https://blog.csdn.net/2301_76862031/article/details/141690379  浏览:    关键词:设计模式之迭代器模式

1.迭代器模式概念

用于顺序访问集合对象中的元素,而无需暴露底层的数据结构。这种模式提供了一种访问集合元素的方法,同时隐藏了集合内部的实现细节。

2.举个栗子

正常遍历和迭代器模式遍历模式,如下图

可以看出我们只要遍历迭代器对象,不关注集合本身,依旧可以获取元素,遍历元素

3.代码实现

1)Iterator接口代码

package org.xiji.iterator;/*** 定义迭代器的行为*/
public interface Iterator<T> {/***  判断下一个元素是否存在**/boolean hasNext();/*** 获取下一个元素**/T next();/*** 增加一个元素*/void add(T t);/*** 减少末尾的怨怒是*/void remove();/*** 通过索引移除元素*/void remove(int index);
}

2)迭代器实现类

:迭代器中的index变量相当于C中的指针,当我们遍历失败的时候需要重置为0,否则,下遍历该对象时还会从当前索引继续遍历

package org.xiji.iterator;import java.util.ArrayList;
import java.util.List;/*** 定义自己的 列表迭代器*/
public class MyList<T> implements Iterator<T> {/**** 定义遍历元素集合*/private List<T> list = new ArrayList<T>();/**** 定义起始变量*/private int index=0;@Overridepublic boolean hasNext() {if (this.index < list.size() || this.index<=0) {return true;}this.index = 0;//指针归零return false;}@Overridepublic T next() {//如果遍历的元素在正常范围内继续遍历if(!hasNext()){throw new RuntimeException("指针异常");}return list.get(this.index++);}//为迭代器实现集合添加元素对象@Overridepublic void add(T t) {this.list.add(t);}//移除迭代器最后对象@Overridepublic void remove() {if (this.list.size() <= 0) {throw new RuntimeException("指针超出范围");}//移除最后一个元素this.list.remove(this.list.size() - 1);}//移除迭代器指定元素@Overridepublic void remove(int index) {if (index < 0 || index >= this.list.size()) {throw new RuntimeException("指针超出范围");}this.list.remove(index);}}

3)迭代器测试类

注:使用while循环实现,for循环上面已经给了

package org.xiji.iterator;/*** 迭代器测试类*/
public class IteratorMain {public static void main(String[] args) {MyList<String> stringMyList = new MyList<>();//字符串迭代器类stringMyList.add("张三");stringMyList.add("李四");stringMyList.add("王五");while (stringMyList.hasNext()) {System.out.println(stringMyList.next());}System.out.println("------------------------------------------------------------- ");stringMyList.remove();while (stringMyList.hasNext()) {System.out.println(stringMyList.next());}System.out.println("-------------------------------------------------------------");stringMyList.add("小久");while (stringMyList.hasNext()) {System.out.println(stringMyList.next());}System.out.println("-------------------------------------------------------------");stringMyList.remove(1);while (stringMyList.hasNext()) {System.out.println(stringMyList.next());}}
}

4)运行结果

4.个人理解

感觉就是对集合的操作的二次封装,简化操作,不关心内部实现

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com