当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
通过Enumeration和Iterator遍历Hashtable的效率分析
发布时间:2010/11/26 16:46:55 来源:城市学习网 编辑:ziteng
  今天需要遍历一个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哦。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved