Enumeration接口和Iterator接口的區別有哪些?
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另外: (01) 函數接口不同Iterator<E> { 8 boolean hasNext(); 9 E next(); 10 void remove(); 11 }
Enumeration 只有2個函數接口。 通過Enumeration,我們只能讀取集合的數據,而不能對數據進行修改。
Iterator
只有3個函數接口。
Iterator除了能讀取集合的數據之外,也能數據進行刪除操作。
(02) Iterator
支持
fail-fast
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接口的區別有哪些?