一直好奇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编程语言中,迭代器模式(Iterator Pattern)是一种常用的设计模式,用于顺序访问集合对象中的元素,而无需暴露其底层表示。这种模式提供了一种方法来访问一个聚合对象的元素,而无需暴露该对象的内部结构。在...
这里,我们通过一个小例子来深入理解Java中的迭代和迭代器。 首先,我们需要了解什么是迭代。迭代是重复执行一个过程,直到达到特定条件为止。在Java中,迭代常用于遍历集合中的所有元素,例如ArrayList、...
下面将详细介绍迭代器模式及其在实际应用中的例子。 迭代器模式的核心在于迭代器类,它定义了遍历元素的接口,包括开始遍历、获取下一个元素以及检查是否还有更多元素等方法。这样,用户可以使用迭代器来遍历任何...
通过这个Java例子,我们可以看到迭代器模式是如何使代码更加灵活和可扩展的。它分离了遍历元素的逻辑,使得我们可以用不同的方式遍历同一个聚合对象,比如使用深度优先遍历或广度优先遍历。同时,由于迭代器接口的...
在Java中,迭代器模式是通过接口和实现类来实现的,让我们深入探讨一下这个模式。 首先,我们要理解迭代器模式的核心概念。在软件工程中,迭代器模式允许我们遍历一个集合对象的所有元素,而无需暴露集合的内部结构...
在Java、C#等面向对象语言中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等。这些集合类提供了迭代器接口,使得用户可以通过迭代器来逐个访问集合中的元素,而无需关心集合的内部实现。例如,在Java中...
迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); while(it.hasNext()){ ...而这就是关于迭代器模式应用很好的例子。
在`TestIterator`这个例子中,可能包含了一个或多个测试用例,用于演示如何在Java中使用迭代器模式。通常,这样的测试会创建一个聚合对象,然后通过迭代器遍历其中的元素,展示如何使用`hasNext()`和`next()`方法。...
在"设计模式的迭代器模式的例子"中,可能包含以下代码结构: 首先,定义一个抽象的迭代器接口: ```java public interface Iterator { boolean hasNext(); Object next(); } ``` 然后,创建一个聚合对象的抽象...
以下是一个简单的Java迭代器模式实现的例子: ```java // 定义一个聚合类,例如一个简单的数组列表 class Aggregate { private List<String> elements = new ArrayList(); public void add(String element) { ...
在深入探讨Java中Iterator(迭代器)的一般用法之前,我们先来理解一下迭代器在编程中的核心价值。迭代器是一种设计模式,其主要作用在于遍历集合中的元素,而无需开发者知晓集合的具体实现细节。这使得代码更加灵活、...
让我们通过一个简单的Java示例来理解迭代器模式: ```java // 聚合对象接口 interface Collection { // 创建迭代器 Iterator createIterator(); // 添加元素 void add(Object obj); } // 具体聚合对象 class ...
Qt5开发及实例,实例CH205,功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。 介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容—信号和槽机制(Signal & ...
下面是一个简单的Java迭代器模式实现示例: ```java import java.util.ArrayList; import java.util.Iterator; import java.util.List; // 定义集合接口 interface Aggregate { Iterator createIterator(); } //...
在Java、C#等面向对象语言中,迭代器模式被广泛使用。 迭代器模式主要包含以下角色: 1. **聚合角色(Aggregate)**:存储一组对象,提供创建迭代器的接口。 2. **迭代器角色(Iterator)**:负责遍历聚合中的元素...
在Java中,使用迭代器模式的例子很常见。例如,遍历ArrayList时,我们先获取迭代器: ```java ArrayList<String> list = new ArrayList(); list.add("Item1"); list.add("Item2"); list.add("Item3"); Iterator...
在本文中,我们介绍了 Java 中的迭代器模式的实现,包括问题描述、迭代器模式的引入、实现迭代器模式、实现迭代器和测试迭代器等内容。迭代器模式是一种非常重要的设计模式,它能够解决容器遍历的问题,提高系统的可...
java 中迭代器的使用方法详解 一、迭代器模式概述 迭代器模式是一种常用的设计模式,它将一个集合对象封装起来,提供了一种遍历其内部元素的方式。迭代器模式有两个主要优点:一是提供给用户一个遍历的方式,而...
下面我们将详细探讨Android中的迭代器模式以及如何通过一个简单的`MyApplication`示例来理解它。 首先,我们需要了解迭代器模式的基本组成: 1. **聚合类(Aggregate)**:包含一组元素,并定义一个接口用于创建...
下面是一个简单的Java迭代器模式示例: ```java // 聚合接口 public interface Aggregate { void add(Object obj); void remove(Object obj); Iterator createIterator(); } // 具体聚合对象 public class ...