`

Java简单迭代器例子

阅读更多

一直好奇Foreach的语法,想ArrayList和HashMap,为什么foreach就可以遍历呢,今天自己做了一个简单的实现。

 

public class SimpleForeach<T> implements Iterable<T>, Iterator<T>{
    
    private T[] t;
    
    /**
     * 迭代的游标值,-1表示迭代未开始。
     */
    private int index = -1;
    private int size;
    
    public SimpleForeach(T[] t) {
        this.t = t;
        this.size = t.length;
    }

    @Override
    public Iterator<T> iterator() {
        return this;
    }

    /**
     * Foreach首先调用这个方法,判断迭代是否已经结束。
     */
    @Override
    public boolean hasNext() {
        boolean flag =  index < size - 1;
        if (index == size -1) {
            index = -1;
        }
        
        return flag;
    }

    /**
     * Foreach游标移动以及获取迭代值的逻辑方法
     */
    @Override
    public T next() {
        if (index < size - 1) {
            index++;
            return t[index];
        }
        
        return null;
    }

    @Override
    public void remove() {
        for (int i = size - 1; i >= 0; i--) {
            if (t[i] != null) {
                t[i] = null;
                return;
            }
        }
    }

}

 测试方法如下:

 

@Test
    public void testSimpleForeach() {
        String[] strs = {"1", "2", "3", "4", "5"};
        
        
        SimpleForeach<String> foreach = new SimpleForeach<String>(strs);
        for (String str : foreach) {
            System.out.println(str);
        }
        
        for (String str : foreach) {
            System.out.println(str);
        }
    }

 在iterator(),hasNext()和next()这三个方法打上断点,可以清楚的知道迭代的过程。

首先进入iterator()方法,获得迭代器。

跟着进入hasNext()方法,判断迭代时候已经到数组的末端。

next()方法则处理游标的移动,迭代值的计算和返回。

 

至于为什么会按照这样的逻辑走,那主要是因为Java编译器,编译器或将Foreach语法编译成如上所说的代码,最后运行时就Foreach语法就生效了。

分享到:
评论

相关推荐

    java 迭代及迭代器的小例子

    关于java的在我课程学习时的小例子.供大家分享。

    设计模式--迭代器模式java例子

    设计模式--迭代器模式java例子

    java迭代器模式.rar

    迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); while(it.hasNext()){ ...而这就是关于迭代器模式应用很好的例子。

    一个小小例子让你读懂迭代器模式,

    迭代器模式简单一句话:迭代器模式就是让用户通过接口访问容器内数据,而不需要了解容器内部数据结构,通用性强,需要与容器进行耦合。

    Qt5开发及实例-CH205.rar,Qt5功能与使用Java风格迭代器的例子代码

    Qt5开发及实例,实例CH205,功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。 介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容—信号和槽机制(Signal & ...

    java设计模式--迭代器模式源码

    java设计模式--迭代器模式,理解这个例子就完全理解迭代器啦

    java 迭代器模式实例详解

    主要介绍了java 迭代器模式实例详解的相关资料,需要的朋友可以参考下

    java设计模式之迭代器模式

    java设计模式之迭代器模式,从生活中的例子举例说明迭代器模式。

    java设计模式之禅

    以简单、诙谐幽默的例子讲述面向对象设计中的23中设计模式。策略模式、观察者模式、单例模式、工厂方法、抽象工厂、迭代器模式、状态模式、适配器模式、装饰者模式、组合模式、原型模式、模板方法……

    设计模式例子(java版本)

    工厂模式、适配器模式、桥接模式、建造者模式、命令模式、组合模式、装饰模式、外观模式、工厂方法模式、迭代器模式、观察者模式、代理模式、单例模式、状态模式、策略模式、模版方法模式、访问者模式

    示例iterator使用及技巧

    示例iterator使用及技巧,有详细例子!先由基础到应用技巧

    simple-streams:演示Java 8,带迭代器的Scala和带scalaz-stream的Scala中的简单流处理

    简单的流演示:Java 8 Stream,Scala Iterable和scalaz-stream 免责声明 警告:这里的代码是我第一次探索Java 8 ,Scala和。 它包含错误,内存泄漏和其他gremlins。 在我们讨论了其中的一些问题。 先决条件 Java 8 ...

    Java的23种设计模式疯狂Java总结.doc

    设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造...迭代器模式45 1.3.5 中介者模式49 1.3.6 备忘录模式52 1.3.7 观察者模式54 1.3.8 状态模式58 1.3.9 策略模式61 1.3.10 模板方法63 1.3.11 者...

    java7hashmap源码-Rebuild-Java:再度重修JAVA

    java7 hashmap源码 README 虽然JAVASE看完了,但仔细一想,好像有很多...迭代器需要额外的内存克隆集合对象 示例:ArrayList, Vector, HashMap 示例:ConcurrentHashMap ExecutorService exec=Executors.newCache

    java8stream源码-java-8-language-demo:基于VenkatSubramaniam在NoFluff,JustStuf

    以前Java只提供了外部迭代器,现在我们也会有内部迭代器 外部例子:我们熟悉这个 elements = [ 1 , 2 , 3 , 4 , 5 ]; for i in elements : print i 内部示例:没有那么多(除非你写了很多 ruby​​) beatles = [ '...

    Java优化编程(第2版)

    Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...

    Java数据结构和算法中文第二版(1)

    迭代器 小结 问题 实验 编程作业 第6章 递归 三角数字 阶乘 变位字 递归的二分查找 汉诺(Hanoi)塔问题 归并排序 清除递归 一些有趣的递归应用 小结 问题 实验 编程作业 第7章 高级排序 ...

    Java《易学设计模式》随书源码.rar

    Java《易学设计模式》随书源代码,书中介绍了多种JAva模式的方法和使用,比如简单工厂模式、工厂方法模式例子、状态模式例子、迭代器模式、解释器模式、命令模式、模板方法模式、享元模式、桥模式、代理模式、适配器...

Global site tag (gtag.js) - Google Analytics