java enumeration遍历_使用Enumeration和Iterator遍历集合类

  • Post author:
  • Post category:java

前言

在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合。后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iterator遍历集合类的实例。不过这个实例中提到了Enumeration比Iterator的效率更高,其实并不是这样子的,该实例是的时间测试太片面了, 因为数据量太少。随着数据两的增加,两者之间的效率越来越接近,而不会出现倍数的比例。而且现在普遍都使用Iterator来遍历集合类,只有特别明确声明必须使用Enumeration的才会用该类遍历集合。

代码实例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

packageedu.sjtu.erplab.hash;importjava.util.Enumeration;importjava.util.Hashtable;importjava.util.Iterator;importjava.util.Map.Entry;//一个遍历hashtable实例

public classTraveseHashTable {public static voidmain(String[] args) {//初始化创建hashtable

Hashtable ht = new Hashtable();for (int i = 0; i < 10000; i++) {

ht.put(“Key=” + i, “Val=” +i);

}//1. 使用Enumeration

long start =System.currentTimeMillis();

Enumeration 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 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 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> 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,两者有许多相似的地方,下面给出这两者之间的比较

35adbe3726b0a756f4180fb400fbac0b.png

从实际的应用开发来看,ArrayList类使用的更多。


版权声明:本文为weixin_34550241原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。