1. 概述
在这个教程中,我们将学习Java中的枚举(Enumeration)和迭代器(Iterator)。我们会探讨它们在代码中的使用以及它们之间的区别。
2. 枚举与迭代器介绍
2.1. 枚举
自Java 1.0版本起,枚举(Enumeration)就存在了。它是一个接口,任何实现都允许我们逐个访问元素。简单来说,它是用来遍历像Vector
和Hashtable
这样的对象集合的。
让我们通过一个例子来看一下枚举的用法:
Vector<Person> people = new Vector<>(getPersons());
Enumeration<Person> enumeration = people.elements();
while (enumeration.hasMoreElements()) {
System.out.println("First Name = " + enumeration.nextElement().getFirstName());
}
这里,我们使用枚举打印Person
的firstName
。elements()
方法提供了一个枚举引用,通过它我们可以逐一访问元素。
2.2. 迭代器
自Java 1.2版本起,迭代器(Iterator)被用于遍历自同一版本引入的集合。现在,让我们使用迭代器来打印Person
的firstName
:
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开始用于枚举Vectors 和Hashtables |
自Java 1.2开始用于遍历List 、Set 、Map 等集合 |
包含方法:hasMoreElements() 和nextElement() |
包含方法:hasNext() , next() 和remove() |
方法名称较长 | 方法名称简短且直观 |
遍历时没有移除元素的方法 | 可以使用remove() 在遍历时移除元素 |
Java 9中添加的asIterator() 提供了枚举上的迭代器,但移除操作会抛出UnsupportedOperationException |
Java 8中添加的forEachRemaining() 用于对剩余元素执行操作 |
4. 总结
在这篇文章中,我们了解了枚举和迭代器的概念,通过代码示例展示了如何使用它们,并指出了它们之间的差异。本文中所有使用的代码示例可在GitHub上找到。