`

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编程语言中,迭代器模式(Iterator Pattern)是一种常用的设计模式,用于顺序访问集合对象中的元素,而无需暴露其底层表示。这种模式提供了一种方法来访问一个聚合对象的元素,而无需暴露该对象的内部结构。在...

    java 迭代及迭代器的小例子

    这里,我们通过一个小例子来深入理解Java中的迭代和迭代器。 首先,我们需要了解什么是迭代。迭代是重复执行一个过程,直到达到特定条件为止。在Java中,迭代常用于遍历集合中的所有元素,例如ArrayList、...

    迭代器的例子

    下面将详细介绍迭代器模式及其在实际应用中的例子。 迭代器模式的核心在于迭代器类,它定义了遍历元素的接口,包括开始遍历、获取下一个元素以及检查是否还有更多元素等方法。这样,用户可以使用迭代器来遍历任何...

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

    通过这个Java例子,我们可以看到迭代器模式是如何使代码更加灵活和可扩展的。它分离了遍历元素的逻辑,使得我们可以用不同的方式遍历同一个聚合对象,比如使用深度优先遍历或广度优先遍历。同时,由于迭代器接口的...

    迭代器模式.rar之java设计模式

    在Java中,迭代器模式是通过接口和实现类来实现的,让我们深入探讨一下这个模式。 首先,我们要理解迭代器模式的核心概念。在软件工程中,迭代器模式允许我们遍历一个集合对象的所有元素,而无需暴露集合的内部结构...

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

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等。这些集合类提供了迭代器接口,使得用户可以通过迭代器来逐个访问集合中的元素,而无需关心集合的内部实现。例如,在Java中...

    java迭代器模式.rar

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

    【Java设计模式】(1)迭代器模式Iterator

    在`TestIterator`这个例子中,可能包含了一个或多个测试用例,用于演示如何在Java中使用迭代器模式。通常,这样的测试会创建一个聚合对象,然后通过迭代器遍历其中的元素,展示如何使用`hasNext()`和`next()`方法。...

    设计模式的迭代器模式的例子

    在"设计模式的迭代器模式的例子"中,可能包含以下代码结构: 首先,定义一个抽象的迭代器接口: ```java public interface Iterator { boolean hasNext(); Object next(); } ``` 然后,创建一个聚合对象的抽象...

    迭代器模式java实现

    以下是一个简单的Java迭代器模式实现的例子: ```java // 定义一个聚合类,例如一个简单的数组列表 class Aggregate { private List&lt;String&gt; elements = new ArrayList(); public void add(String element) { ...

    Java学习之Iterator(迭代器)的一般用法

    在深入探讨Java中Iterator(迭代器)的一般用法之前,我们先来理解一下迭代器在编程中的核心价值。迭代器是一种设计模式,其主要作用在于遍历集合中的元素,而无需开发者知晓集合的具体实现细节。这使得代码更加灵活、...

    迭代器模式代码示例

    让我们通过一个简单的Java示例来理解迭代器模式: ```java // 聚合对象接口 interface Collection { // 创建迭代器 Iterator createIterator(); // 添加元素 void add(Object obj); } // 具体聚合对象 class ...

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

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

    Java迭代器模式:遍历集合的优雅之舞

    下面是一个简单的Java迭代器模式实现示例: ```java import java.util.ArrayList; import java.util.Iterator; import java.util.List; // 定义集合接口 interface Aggregate { Iterator createIterator(); } //...

    迭代器模式Demo

    在Java、C#等面向对象语言中,迭代器模式被广泛使用。 迭代器模式主要包含以下角色: 1. **聚合角色(Aggregate)**:存储一组对象,提供创建迭代器的接口。 2. **迭代器角色(Iterator)**:负责遍历聚合中的元素...

    java设计模式之迭代器模式

    在Java中,使用迭代器模式的例子很常见。例如,遍历ArrayList时,我们先获取迭代器: ```java ArrayList&lt;String&gt; list = new ArrayList(); list.add("Item1"); list.add("Item2"); list.add("Item3"); Iterator...

    java 迭代器模式实例详解

    在本文中,我们介绍了 Java 中的迭代器模式的实现,包括问题描述、迭代器模式的引入、实现迭代器模式、实现迭代器和测试迭代器等内容。迭代器模式是一种非常重要的设计模式,它能够解决容器遍历的问题,提高系统的可...

    java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解 一、迭代器模式概述 迭代器模式是一种常用的设计模式,它将一个集合对象封装起来,提供了一种遍历其内部元素的方式。迭代器模式有两个主要优点:一是提供给用户一个遍历的方式,而...

    Android迭代器模式demo

    下面我们将详细探讨Android中的迭代器模式以及如何通过一个简单的`MyApplication`示例来理解它。 首先,我们需要了解迭代器模式的基本组成: 1. **聚合类(Aggregate)**:包含一组元素,并定义一个接口用于创建...

    设计模式-迭代器模式(讲解及其实现代码)

    下面是一个简单的Java迭代器模式示例: ```java // 聚合接口 public interface Aggregate { void add(Object obj); void remove(Object obj); Iterator createIterator(); } // 具体聚合对象 public class ...

Global site tag (gtag.js) - Google Analytics