1. 概述

在这个教程中,我们将学习Java中的枚举(Enumeration)和迭代器(Iterator)。我们会探讨它们在代码中的使用以及它们之间的区别。

2. 枚举与迭代器介绍

2.1. 枚举

自Java 1.0版本起,枚举(Enumeration)就存在了。它是一个接口,任何实现都允许我们逐个访问元素。简单来说,它是用来遍历像VectorHashtable这样的对象集合的。

让我们通过一个例子来看一下枚举的用法:

Vector<Person> people = new Vector<>(getPersons());
Enumeration<Person> enumeration = people.elements();
while (enumeration.hasMoreElements()) {
    System.out.println("First Name = " + enumeration.nextElement().getFirstName());
}

这里,我们使用枚举打印PersonfirstNameelements()方法提供了一个枚举引用,通过它我们可以逐一访问元素。

2.2. 迭代器

自Java 1.2版本起,迭代器(Iterator)被用于遍历自同一版本引入的集合。现在,让我们使用迭代器来打印PersonfirstName

List<Person> persons = getPersons();
Iterator<Person> iterator = persons.iterator();
while (iterator.hasNext()) {
    System.out.println("First Name = " + iterator.next().getFirstName());
}

所以,我们可以看到枚举和迭代器分别自Java 1.0和1.2以来存在,用于一次遍历一组对象

3. 枚举与迭代器的区别

下面的表格列出了枚举与迭代器的主要区别:

枚举 迭代器
自Java 1.0开始用于枚举VectorsHashtables 自Java 1.2开始用于遍历ListSetMap等集合
包含方法:hasMoreElements()nextElement() 包含方法:hasNext(), next()remove()
方法名称较长 方法名称简短且直观
遍历时没有移除元素的方法 可以使用remove()在遍历时移除元素
Java 9中添加的asIterator()提供了枚举上的迭代器,但移除操作会抛出UnsupportedOperationException Java 8中添加的forEachRemaining()用于对剩余元素执行操作

4. 总结

在这篇文章中,我们了解了枚举和迭代器的概念,通过代码示例展示了如何使用它们,并指出了它们之间的差异。本文中所有使用的代码示例可在GitHub上找到。