zoukankan      html  css  js  c++  java
  • 8、迭代器模式

    一、迭代器模式概念:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

    二、迭代器的角色构成

      (1)、迭代器角色

      (2)、具体迭代器角色

      (3)、容器角色

      (4)、具体容器角色

    三、迭代器模式的优缺点

      优点:1、简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但是用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器就简单的多了

        2、封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。

        3、可以提供多种遍历方法,正序倒序都可以。

      缺点:1、对于简单的遍历,使用迭代器会繁琐,像ArrayList,我们宁可使用for循环和get方法来遍历集合

        

    四、实现

    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public interface MyList {
        public void add(Object object);
        public Object get(int index);
        public MyIterator iterator();
        public int getSize();
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class ConList implements MyList{
        Object obj[];
        int size=0;
        int index=0;
        public ConList(){
            obj=new Object[100];
        }
        @Override
        public void add(Object object) {
            obj[index++]=object;
            this.size++;
        }
    
        @Override
        public Object get(int index) {
            if(obj[index]!=null){
                return obj[index];
            }
            return null;
        }
    
        @Override
        public ConIterator iterator() {
            return new ConIterator(this);
        }
    
        @Override
        public int getSize() {
            return this.size;
        }
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public interface MyIterator {
        public boolean hasNext();
        public Object Next();
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class ConIterator implements MyIterator{
        private int index=0;
        private ConList list;
        public ConIterator(ConList list){
            this.list=list;
        }
        @Override
        public boolean hasNext() {
            if(index>=list.size){
               return false;
            }
            return true;
        }
    
        @Override
        public Object Next() {
            Object obj=list.get(index++);
            return obj;
        }
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class Test {
        public static void main(String[] args) {
            ConList list=new ConList();
            MyIterator iterator=list.iterator();
            list.add("asd");
            list.add("asdd");
            while(iterator.hasNext()){
                System.out.println(iterator.Next());
            }
        }
    }
  • 相关阅读:
    【NET CORE微服务一条龙应用】第一章 网关使用与配置
    111
    test
    再来一个测试
    测试博客
    flutter 中的json解析
    关于flutter -app开发过程中的问题及解决方式总结
    使用Mybatis-plus通过自定义Sql查询只有主键为null的问题
    Centos 6中keepalived作为服务启动
    CentOS6 开放、关闭防火墙相关端口命令
  • 原文地址:https://www.cnblogs.com/television/p/8525150.html
Copyright © 2011-2022 走看看