前言
在数据库连接池分析的代码实例中,看到其中使用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,两者有许多相似的地方,下面给出这两者之间的比较
从实际的应用开发来看,ArrayList类使用的更多。
作者:xwdreamer
出处:http://www.cnblogs.com/xwdreamer
欢迎任何形式的转载,但请务必注明出处。
分享到:
相关推荐
Enumeration和Iterator接口功能相似,而且Iterator的功能还比Enumeration多,那么为什么还要使用Enumeration
Java 实例 - 使用 Enumeration 遍历 HashTable源代码+详细指导教程.zip
下面小编就为大家带来一篇详谈Enumeration接口和Iterator接口的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Enumeration 和 Iterator 接口的区别? 8. 为何没有像 Iterator.add()这样的方法,向集合中添加元素? 9. 为何迭代器没有一个方法可以直接获取下一个元素,而不需要 移动游标? 10. Iterater 和 ListIterator ...
经我细心探究,终于把J2ME中的Enumeration排序问题给解决了
工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections) 这个图乱的一批o_o … emmmm大致可以看出,上面有三巨头,即Iterator、Collection、Map(虚线框是接口,实线框是类),Java的集合类主要就是由...
Iterator与Enumeration分别是实现迭代器和枚举器类的接口,下面就带大家来详解Java中的迭代迭代器Iterator与枚举器Enumeration,以及它们之间的区别.
USB枚举过程 USB Enumeration
注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该接口就只有四种方法 // 是否存在未遍历元素 boolean hasNext(); // 返回下一个元素
7.2.1 使用Iterator接口遍历集合元素 244 7.2.2 使用foreach循环遍历集合元素 246 7.3 Set接口 247 7.3.1 HashSet类 247 学生提问:hashCode方法对于HashSet的作用是什么? 249 7.3.2 TreeSet类 252 7.3.3 ...
Access-based Enumeration Windows Server 2003安装包
NULL 博文链接:https://chaoyi.iteye.com/blog/2085158
Java类集框架 最大单值操作父接口Collection及其子接口、子类: List接口、ArrayList类、...Iterator、ListIterator、foreach、废除的Enumeration Collections工具类 Comparable接口、equals()方法、hashCode()方法
cwe_latest 2021 common weakness enumeration.pdf
java枚举类型详细讲解,自己撰写的一本电子书,编写得很详细
Network Enumeration .To keep me from implementing such a task over and over again枚举网络资源
文件包含和目录遍历的模糊,枚举和利用工具。 FDsploit菜单: $ python fdsploit.py -h _____ ____ _ _ _ | __| \ ___ ___| |___|_| |_ | __| | |_ -| . | | . | | _| |__| |____/|___| _|_|___|_|_| |_|......
swift代码-class类和Enumeration枚举的使用
Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration