Java 中枚举器 vs 迭代器 vs 列表迭代器
原文:https://www . geesforgeks . org/enumeration-vs-iterator-vs-listiterator-in-Java/
枚举 就是一个界面。它在 java 的集合框架中用于逐个检索元素。枚举是一个遗留接口,只适用于遗留类,如向量、哈希表、堆栈等。它提供单向迭代。通过使用枚举,我们只能执行读取操作,而不能执行移除操作。
枚举对象可以通过调用 Vector 类中的 elements()方法来创建。
// Here "v" is a vector object. enum is of
// type Enumeration interface and refers to "v"
Enumeration enum = v.elements();
一个迭代器是一个通用光标,可以应用于任何集合对象。它提供单向迭代。通过使用迭代器,我们可以执行读取和移除操作,但是不能执行替换操作。每当我们想要枚举所有集合框架实现的接口中的元素时,比如 Set 、 List 、 Queue 、 DeQue ,以及 Map 接口的实现类,都必须使用迭代器。
迭代器对象可以通过调用集合接口中的迭代器()方法来创建
// Here "c" is any collection object. itr is of
// type Iterator interface and refers to "c"
Iterator itr = c.iterator();
列表迭代器 是三个光标中最强大的光标。列表迭代器只适用于数组列表、链表、栈等列表实现的类。列表迭代器向前和向后遍历。通过使用 ListIteartor,我们可以执行读取、移除和替换操作。当我们想要枚举列表的元素时,必须使用列表迭代器。
listIterator 对象可以通过调用列表界面中的 ListIterator()方法来创建。
// Here "l" is any list object. ltr is of
// type ListIterator interface and refers to "l"
ListIterator ltr = l.listIterator();
Java 语言(一种计算机语言,尤用于创建网站)
// A Java program to demonstrates the
// difference between Enumeration,
// Iterator, and ListIterator
import java.io.*;
import java.util.*;
class GFG {
public static void main(String args[])
{
// Creating a vector object
Vector<Integer> v = new Vector<Integer>();
// Adding elements to the vector object
v.add(10);
v.add(20);
v.add(30);
v.add(40);
v.add(50);
System.out.println("Enumeration: ");
// Creating an Enumeration object
Enumeration e = v.elements();
// Checking the next element availability
while (e.hasMoreElements()) {
// Moving cursor to the next element
int i = (Integer)e.nextElement();
// Printing the element
System.out.print(i + " ");
}
System.out.println();
System.out.println();
System.out.println("Iterator: ");
// Creating Iterator object
Iterator<Integer> itr = v.iterator();
// Checking the next element availability
while (itr.hasNext()) {
// Moving cursor to the next element
int i = (Integer)itr.next();
// Checking if i == 10 then
// remove the element
if (i == 10)
itr.remove();
}
System.out.println(v);
System.out.println();
System.out.println("ListIterator: ");
// Creating ListIterator object
ListIterator<Integer> ltr = v.listIterator();
// Checking the next element availability
while (ltr.hasNext()) {
// Moving cursor to the next element
int i = (Integer)ltr.next();
// Performing add, remove, and
// replace operation
if (i == 20)
ltr.remove();
else if (i == 30)
ltr.add(60);
else if (i == 40)
ltr.set(100);
}
System.out.println(v);
}
}
**Output
```java Enumeration: 10 20 30 40 50
Iterator: [20, 30, 40, 50]
ListIterator: [30, 60, 100, 50]
```**
*显示枚举、迭代器和列表迭代器*之间差异的表格**
| **属性** | **枚举** | **迭代器** | **列表迭代器** | | 1.我们可以在哪里申请? | 它只能应用于遗留类。 | 它可以应用于任何集合接口。 | 它可以应用于唯一的列表界面。 | | 2.是遗产吗? | 是(在 1.0 V 中引入)。 | 否(在 1.2 V 中引入)。 | 否(在 1.2 V 中引入)。 | | 3.允许的移动 | 单向,即我们只能向前遍历集合中的元素。 | 单向,即我们只能向前遍历集合中的元素。 | 双向的,也就是说,我们可以向前和向后遍历集合中的元素。 | | 4.允许的操作 | 我们只能执行读取操作。 | 我们可以执行读取和移除操作。 | 我们可以执行读取、移除、添加和替换操作。 | | 5.我们怎样才能得到它? | 通过调用 vector 类中的 elements()方法。 | 通过调用任何集合接口中存在的迭代器()方法。 | 通过调用列表接口中的 listIterator()方法。 |版权属于:月萌API www.moonapi.com,转载请注明出处