應用Enumeration和Iterator遍歷聚集類詳解。本站提示廣大學習愛好者:(應用Enumeration和Iterator遍歷聚集類詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是應用Enumeration和Iterator遍歷聚集類詳解正文
媒介
在數據庫銜接池剖析的代碼實例中,看到個中應用Enumeration來遍歷Vector聚集。後來就找了一些材料檢查都有哪些辦法可以遍歷聚集類,在網上找到了以下的應用Enumeration和Iterator遍歷聚集類的實例。不外這個實例中提到了Enumeration比Iterator的效力更高,其實其實不是如許子的,該實例是的時光測試太單方面了, 由於數據量太少。跟著數據兩的增長,二者之間的效力愈來愈接近,而不會湧現倍數的比例。並且如今廣泛都應用Iterator來遍歷聚集類,只要特殊明白聲明必需應用Enumeration的才會用該類遍歷聚集。
代碼實例
package edu.sjtu.erplab.hash;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;
//一個遍歷hashtable實例
public class TraveseHashTable {
public static void main(String[] args) {
//初始化創立hashtable
Hashtable<String, String> ht = new Hashtable<String, String>();
for (int i = 0; i < 10000; i++) {
ht.put("Key=" + i, "Val=" + i);
}
// 1. 應用Enumeration
long start = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//應用列舉獲得key
while (en.hasMoreElements()) {
en.nextElement();
}
long end = System.currentTimeMillis();
System.out.println("Enumeration keys costs " + (end - start)
+ " milliseconds");
// 2. 應用Enumeration
start = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//應用列舉獲得這個key-value對
while (en2.hasMoreElements()) {
en2.nextElement();
}
end = System.currentTimeMillis();
System.out.println("Enumeration elements costs " + (end - start)
+ " milliseconds");
// 3. Iterator
start = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//應用迭代器獲得這個key
while (it.hasNext()) {
it.next();
}
end = System.currentTimeMillis();
System.out.println("Iterator keySet costs " + (end - start)
+ " milliseconds");
// 4. Iterator
start = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//應用迭代器獲得這個key-value對
while (it2.hasNext()) {
it2.next();
}
end = System.currentTimeMillis();
System.out.println("Iterator entrySet costs " + (end - start)
+ " milliseconds");
}
}
放棄的接口:Enumeration
Enumeration接口是JDK1.0時推出的,是最好的迭代輸入接口,最早應用Vector(如今推舉應用ArrayList)時就是應用Enumeration接口停止輸入。固然Enumeration是一個舊的類,然則在JDK1.5以後為Enumeration類停止了擴大,增長了泛型的操作運用。
Enumeration接口經常使用的辦法有hasMoreElements()(斷定能否有下一個值)和 nextElement()(掏出以後元素),這些辦法的功效跟Iterator相似,只是Iterator中存在刪除數據的辦法,而此接口不存在刪除操作。
為何還要持續應用Enumeration接口
Enumeration和Iterator接口功效類似,並且Iterator的功效還比Enumeration多,那末為何還要應用Enumeration?這是由於java的成長閱歷了很長時光,一些比擬陳舊的體系或許類庫中的辦法還在應用Enumeration接口,是以為了兼容,照樣須要應用Enumeration。
List接口的經常使用子類
List接口經常使用的子類有ArrayList和Vector,二者有很多類似的處所,上面給出這二者之間的比擬