今天需要遍历一个Hashtable,查看了一下Hashtable类,发现它提供了如下几个方法可供我们遍历:
- keys() - returns an Enumeration of the keys of this Hashtable
- keySet() - returns a Set of the keys
- entrySet() - returns a Set of the mappings
- elements() - returns an Enumeration of the values of this Hashtable
4种方法,那种更好呢,写段代码来比较一下吧:
import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator;
import java.util.Map.Entry;
public class traveseHashTable { public static void main(String[] args) { 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(); 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(); 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(); 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();
while (it2.hasNext()) { it2.next(); }
end = System.currentTimeMillis(); System.out.println("Iterator entrySet costs " + (end - start) + " milliseconds"); } }
|
这里创建了一个10000个元素的Hashtable来供我们遍历,打印出结果如下:
Enumeration keys costs 6 milliseconds Enumeration elements costs 5 milliseconds Iterator keySet costs 10 milliseconds Iterator entrySet costs 10 milliseconds |
我们看到,通过迭代来遍历比枚举要多花尽一倍的时间。所以建议大家最好通过枚举类来遍历Hashtable哦。
阅读(828) | 评论(0) | 转发(0) |