Java中迭代器和列舉的區別
迭代器和列舉都是用於遍歷和訪問集合中元素的遊標。它們都屬於集合框架。列舉在 JDK 1.0 中新增,迭代器在 JDK 1.2 版本的集合框架中新增。
列舉無法對集合進行結構性更改,因為它只能只讀訪問集合中的元素。它具有以下方法:
- *hasMoreElements()
- *nextElement()
另一方面,迭代器可以讀取和刪除集合中的元素。它具有以下方法:
- *hasNext()
- *next()
- *remove()
| 序號 | 關鍵點 | 迭代器 | 列舉 |
|---|---|---|---|
| 1 | 基礎 | 在迭代器中,我們可以在遍歷集合中的元素時讀取和刪除元素。 | 使用列舉,我們只能在遍歷集合中的元素時讀取元素。 |
| 2. | 訪問 | 它可以用於集合框架的任何類。 | 它只能用於集合框架的遺留類,例如 Vector 和 HashTable。 |
| 3. | 快速失敗和安全失敗 | 集合中的任何更改,例如在某個執行緒迭代集合期間從集合中刪除元素,都會引發併發修改異常。 | 列舉本質上是安全失敗的。它不會引發併發修改異常。 |
| 4. | 限制 | 只能向前迭代。 | 無法使用列舉執行刪除操作。 |
| 5. | 方法 | 它具有以下方法: *hasNext() *next() *remove() | 它具有以下方法: *hasMoreElements() *nextElement() |
列舉示例
class EnumerationExample {
public static void main(String args[]) {
List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"}));
Vector v = new Vector(list);
delete(v, "Dog");
}
private static void delete(Vector v, String name) {
Enumeration e = v.elements();
while (e.hasMoreElements()) {
String s = (String) e.nextElement();
if (s.equals(name)) {
v.remove(name);
}
}
// Display the names
System.out.println("The names are:");
e = v.elements();
while (e.hasMoreElements()) {
// Prints elements
System.out.println(e.nextElement());
}
}
}迭代器示例
class IteratorExample {
public static void main(String args[]) {
List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"}));
Vector v = new Vector(list);
delete(v, "Dog");
}
private static void delete(Vector v, String name) {
Iterator i = v.iterator();
while (i.hasNext()) {
String s = (String) i.next();
if (s.equals(name)) {
i.remove();
}
}
// Display the names
System.out.println("The names are:");
i = v.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP