1. 程式人生 > >Enumeration接口和Iterator接口的區別有哪些?

Enumeration接口和Iterator接口的區別有哪些?

www. www () itl package 一個 asm 接口 blog

Enumeration速度是Iterator的2倍,同時占用更少的內存。但是,Iterator遠遠比Enumeration安全,因為其他線程不能夠修改正在被iterator遍歷的集合裏面的對象。同時,Iterator允許調用者刪除底層集合裏面的元素,這對Enumeration來說是不可能的。

 1 package java.util;
 2 
 3 public interface Enumeration<E> {
 4     boolean hasMoreElements();
 5     E nextElement();
 6 }
 7 public interface
Iterator<E> { 8 boolean hasNext(); 9 E next(); 10 void remove(); 11 }
另外: (01) 函數接口不同

Enumeration 只有2個函數接口。 通過Enumeration,我們只能讀取集合的數據,而不能對數據進行修改。
Iterator 只有3個函數接口。 Iterator除了能讀取集合的數據之外,也能數據進行刪除操作。

(02) Iterator 支持 fail-fast

機制,而 Enumeration 不支持
Enumeration 是JDK 1.0添加的接口。使用到它的函數包括Vector、Hashtable等類,這些類都是JDK 1.0中加入的,Enumeration存在的目的就是為它們提供遍歷接口。Enumeration本身並沒有支持同步,而在Vector、Hashtable實現Enumeration時,添加了同步。
而Iterator 是JDK 1.2才添加的接口,它也是為了HashMap、ArrayList等集合提供遍歷接口。Iterator是支持fail-fast機制的:當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件。

至於快速失敗以及安全失敗,可以參考《快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什麽?》一文

Enumeration接口和Iterator接口的區別有哪些?