• JAVA设计模式第八章:迭代器模式(Iterator Pattern)


    迭代器模式(Iterator Pattern)

    迭代器模式
    迭代器模式属于行为型模式

    1. 什么是迭代器模式

    这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

    2. 为什么要用迭代器模式

    1. 迭代器模式简化了集合的遍历操作,开发人员可是使用相同的代码遍历不同的集合;
    2. 扩展性强,可以在不修改原有代码情况下创建自己的迭代器;

    3. 案列- ArrayList

    java中ArrayList的实现过程

    1. ArrayList通过继承间接实现了Iterable接口,Iterable表示这个集合是可以被迭代的;
    2. Iterable接口中有一个关键方法iterator()返回一个迭代器对象Iterator;
    3. ArrayList有一个内部类实现了Itr实现了Iterator接口;
    4. ArrayList的iterator()方法直接放回Itr()对象;
      在这里插入图片描述

    在这里插入图片描述

    4. 自己扩展实现一个ArrayList的迭代器

    这个是实现为最简单的实现,对比JDK自己的实现少了很多校验逻辑,仅供学习测试

    package com.cans;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     * 自定义迭代器 倒序输出
     *
     * @author shenc
     * @date 2022-09-06 16:34
     **/
    public class MyIterator<E> implements Iterator<E>{
        int cursor;       // index of next element to return
        int size;
        ArrayList<E> arrayList;
    
        public MyIterator(ArrayList<E> arrayList) {
            this.arrayList = arrayList;
            this.size = arrayList.size();
            this.cursor = arrayList.size();
        }
    
        @Override
        public boolean hasNext() {
            return cursor != 0;
        }
    
        @Override
        public E next() {
            E e = arrayList.get(cursor-1);
            cursor --;
            return e;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    测试代码

    import com.cans.MyIterator;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     * 类描述
     *
     * @author shenc
     * @date 2022-09-06 17:02
     **/
    public class MyIteratorTest {
    
        @Test
        public void test1(){
            ArrayList<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
    
            Iterator<Integer> iterator = list.iterator();
    
            System.out.println("====================顺序====================");
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
            System.out.println("====================倒序====================");
            MyIterator<Integer> myIterator = new MyIterator<>(list);
    
            while (myIterator.hasNext()){
                System.out.println(myIterator.next());
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    结果输出:

    顺序
    1
    2
    3
    倒序
    3
    2
    1
    Process finished with exit code 0

  • 相关阅读:
    华清远见上海中心22071班
    初识VisionPro应用开发
    bash if条件判断
    Programming Languages PartC Week3学习笔记——子类型(Subtyping)的讨论
    el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
    hugo学习笔记
    MapReduce框架原理
    数学分析:数项级数的性质
    欧姆电阻测量原理
    BP神经网络应用案例
  • 原文地址:https://blog.csdn.net/shencange/article/details/125817203