使用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"); }} 