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 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)的區別是什么?》一文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM