Enumeration
和 Iterator
都是 Java 中用于遍历集合元素的接口,但它们的设计目的、功能和用法有所不同。以下是它们的主要区别:
1. 引入时间:
Enumeration
:- 是 Java 1.0 引入的接口,属于早期的集合遍历方式。
- 主要用于遍历
Vector
和Hashtable
等旧版集合类。
Iterator
:- 是 Java 1.2 引入的接口,属于 Java 集合框架(Java Collections Framework)的一部分。
- 用于遍历
List
、Set
和Map
等集合类。
2. 功能对比:
功能 | Enumeration | Iterator |
---|---|---|
遍历方向 | 只能向前遍历(单向) | 只能向前遍历(单向) |
删除元素 | 不支持 | 支持(通过 remove 方法) |
方法数量 | 2 个方法:hasMoreElements() 和 nextElement() | 3 个方法:hasNext() 、next() 和 remove() |
并发修改支持 | 不支持 | 支持快速失败(fail-fast)机制 |
3. 方法详解:
Enumeration
接口:
boolean hasMoreElements()
:- 判断是否还有更多元素。
E nextElement()
:- 返回下一个元素。
示例:
Vector<String> vector = new Vector<>();
vector.add("Apple");
vector.add("Banana");
Enumeration<String> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement());
}
Iterator
接口:
boolean hasNext()
:- 判断是否还有更多元素。
E next()
:- 返回下一个元素。
void remove()
:- 删除当前元素(可选操作)。
示例:
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
if (element.equals("Banana")) {
iterator.remove(); // 删除元素
}
}
4. 并发修改支持:
Enumeration
:- 不支持检测并发修改。
- 如果在遍历过程中集合被修改,可能会导致不确定的行为。
Iterator
:- 支持快速失败(fail-fast)机制。
- 如果在遍历过程中集合被修改(除了通过
Iterator
的remove
方法),会抛出ConcurrentModificationException
异常。
5. 使用场景:
Enumeration
:- 适用于旧版集合类(如
Vector
和Hashtable
)。 - 适用于不需要删除元素或检测并发修改的场景。
- 适用于旧版集合类(如
Iterator
:- 适用于 Java 集合框架中的所有集合类。
- 适用于需要删除元素或检测并发修改的场景。
6. 总结对比:
特性 | Enumeration | Iterator |
---|---|---|
引入时间 | Java 1.0 | Java 1.2 |
遍历方向 | 单向 | 单向 |
删除元素 | 不支持 | 支持 |
并发修改支持 | 不支持 | 支持(fail-fast 机制) |
适用集合 | Vector 、Hashtable 等旧版集合 | List 、Set 、Map 等集合框架 |
7. 代码示例对比:
使用 Enumeration
:
Vector<String> vector = new Vector<>();
vector.add("Apple");
vector.add("Banana");
Enumeration<String> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement());
}
使用 Iterator
:
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
if (element.equals("Banana")) {
iterator.remove(); // 删除元素
}
}
8. 选择依据:
- 如果需要遍历旧版集合类(如
Vector
或Hashtable
),可以使用Enumeration
。 - 如果需要遍历 Java 集合框架中的集合类,并支持删除元素或检测并发修改,应使用
Iterator
。
通过理解 Enumeration
和 Iterator
的区别,可以更好地选择适合的遍历方式来处理集合元素。
THE END
暂无评论内容