# Java 中元素迭代的历史

原文：http://zetcode.com/articles/javaiterationhistory/

在本教程中，我们将研究 Java 中元素迭代的历史。

编程中最常见的任务之一就是迭代数据集合。 本教程说明了随着时间的推移，元素迭代如何随 Java 语言一起发展。

## `Enumeration`

在 Java 的早期，`Enumeration`用于迭代数据元素。 `Enumeration`接口定义了一些方法，我们可以通过这些方法枚举（一次获得一个元素）对象集合中的元素。 两个主要的收集类是`Vector`和`Hashtable`。

今天，`Enumeration`，`Vector`和`Hashtable`被认为已过时。 但是，它们不被弃用。

`EnumerationEx.java`

```java
package com.zetcode;

import java.util.Enumeration;
import java.util.Vector;

public class EnumerationEx {

    public static void main(String[] args) {

        Vector items = new Vector();

        items.add("coin");
        items.add("pen");
        items.add("chair");
        items.add("lamp");
        items.add("cup");
        items.add("spoon");

        Enumeration itemsEn = items.elements();

        while (itemsEn.hasMoreElements()) {
            System.out.println(itemsEn.nextElement());
        }
    }
}

```

我们有一个向量字符串。 我们使用`Enumeration`遍历向量的元素。

```java
Enumeration itemsEn = items.elements();

```

`elements()`方法返回向量的`Enumeration`。

```java
while (itemsEn.hasMoreElements()) {

    System.out.println(itemsEn.nextElement());
}

```

元素在`while`循环中遍历。 当还有更多元素要提取时，`hasMoreElements()`返回`true`，而在列举所有元素时返回`false`。

## 迭代器

Java 1.2 引入了标准集合类（`List`，`Set`，`Map`）和`Iterator`。 `Iterator`带来了迭代器设计模式，这是一种常见的行为模式，用于按顺序访问集合对象的元素，而无需了解其基础表示。

`IteratorEx.java`

```java
package com.zetcode;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class IteratorEx {

    public static void main(String[] args) {

        List<String> items = Arrays.asList("coin", "ball", "lamp", "spoon");

        Iterator it = items.iterator();

        while (it.hasNext()) {

            System.out.println(it.next());
        }
    }
}

```

在示例中，我们使用`Iterator`遍历元素列表。

```java
List<String> items = Arrays.asList("coin", "ball", "lamp", "spoon");

```

我们使用`Arrays.asList()`方法在一行中定义一个列表。

```java
Iterator it = items.iterator();

```

我们使用`iterator()`方法从列表中获得迭代器。

```java
while (it.hasNext()) {

    System.out.println(it.next());
}

```

我们在`while`循环中浏览元素列表。 我们使用迭代器的`hasNext()`和`next()`方法。

## 可迭代对象和增强的`for`循环

Java 5 引入了泛型`Iterable`和增强的`for`循环。 `Iterable`接口允许对象成为增强的`for`循环语句的目标。 `Iterable`是一个对象，其中包含可以迭代的一系列元素。 它具有一种产生`Iterator`的方法。

`EnhancedForLoop.java`

```java
package com.zetcode;

import java.util.Arrays;
import java.util.List;

public class EnhancedForLoop {

    public static void main(String[] args) {

        List<String> items = Arrays.asList("coin", "ball", "lamp", "spoon");

        for (String item: items) {

            System.out.println(item);
        }
    }
}

```

该示例使用增强的`for`循环遍历列表元素。 迭代器的创建以及对`hasNext()`和`next()`方法的调用不是明确的，但它们仍在幕后进行。

## Java8 `forEach()`方法

`forEach()`方法对`Iterable`的每个元素执行给定的操作，直到所有元素都已处理或该操作引发异常。 `forEach()`方法使用内部迭代器，而先前的方法使用外部迭代器。

`ForEachEx.java`

```java
package com.zetcode;

import java.util.Arrays;
import java.util.List;

public class ForEachEx {

    public static void main(String[] args) {

        List<String> items = Arrays.asList("coin", "ball", "lamp", "spoon");

        items.forEach(System.out::println);
    }
}

```

在示例中，我们使用`forEach()`方法遍历元素。

在本教程中，我们研究了 Java 中元素迭代的简要历史。

您可能也对以下相关教程感兴趣：[用 Java 过滤列表](/articles/javafilterlist/)， [Java `ArrayList`教程](/articles/javaarraylist/)， [Opencsv 教程](/articles/opencsv/)， [Java 教程](/lang/java/)，[用 Java 读取文本](/articles/javareadtext/) 或[用 Java 读取网页](/articles/javareadwebpage/)或 [Google Guava 简介](/articles/guava/)。