博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器模式
阅读量:5795 次
发布时间:2019-06-18

本文共 2519 字,大约阅读时间需要 8 分钟。

hot3.png

迭代器的产生是为了以一种统一的方式遍历不同的容器,并且不会暴露内部细节。

public interface IContainer {    /**     * 长度     *     * @return     */    int size();    /**     * 增 0有效     *     * @param data     */    void put(Object data);    /**     * 删 0有效     */    void delete(int position);    /**     * 改 0有效     *     * @param position     * @param data     */    void set(int position, Object data);    /**     * 查 0有效     *     * @param position     * @return     */    Object get(int position);    /**     * 获取迭代器对象     *     * @return     */    Iterator getIterator();}
public class ListIterator implements Iterator {    private IContainer IContainer;    private int iteratorPosition;    // 当前位置    public ListIterator(IContainer IContainer) {        this.IContainer = IContainer;        iteratorPosition = 0;    }    @Override    public boolean hasNext() {        return iteratorPosition + 1 > IContainer.size();    }    @Override    public Object next() {        iteratorPosition++;        return IContainer.get(iteratorPosition);    }}
public class ListContainer implements IContainer {    private int currentSize = 0;          // 元素个数    private Object[] arr;    private static int MAX = 100;    public ListContainer() {        currentSize = 0;        arr = new Object[MAX];    }    @Override    public int size() {        return currentSize;    }    @Override    public void put(Object data) {        if (data == null) return;        if (currentSize >= MAX) return; // 暂时不考虑扩容的问题        arr[currentSize] = data;        currentSize++;    }    @Override    public void delete(int position) {        if (position < 0 || currentSize == 0 || position >= currentSize) return;        if (currentSize > 1) {            for (int i = position; i < currentSize - 1; i++) {                arr[i] = arr[i + 1];            }        }        currentSize--;    }    @Override    public void set(int position, Object data) {        if (position < 0 || position >= currentSize || data == null) return;        arr[position] = data;    }    @Override    public Object get(int position) {        return arr[position];    }    @Override    public Iterator getIterator() {        return new ListIterator(this);    }}

// 实现

public static void main(String[] args) {    IContainer IContainer = new ListContainer();    IContainer.put("1");    IContainer.put("2");    IContainer.put("3");    Iterator iterator = IContainer.getIterator();    while (iterator.hasNext()) {        System.out.print(iterator.toString());    }}

转载于:https://my.oschina.net/u/3342652/blog/896477

你可能感兴趣的文章
10g手动创建数据库
查看>>
Spring MVC EL表达式不能显示
查看>>
【致青春】我们挥霍时间的年代
查看>>
Windwos Server 2008 R2 DHCP服务
查看>>
SAS和SATA硬盘的区别
查看>>
现代程序设计 学生情况调查
查看>>
U盘安装linux后无法引导
查看>>
C# 矩阵作业
查看>>
俺的新书《Sencha Touch实战》终于出版了
查看>>
关于数据库查询时报“query block has incorrect number of result columns”
查看>>
li下的ul----多级列表
查看>>
UVa 11292 勇者斗恶龙(The Dragon of Loowater)
查看>>
区域生长算法
查看>>
switch语句小练习
查看>>
组合逻辑电路
查看>>
POP-一个点击带有放大还原的动画效果
查看>>
UE4材质是什么样的机制
查看>>
使用QTP录制自带Flight小实例
查看>>
Loadrunner脚本编程(4)-数据类型操作和字符串操作
查看>>
STL 算法
查看>>