认识Enumeration,Iterator的使用场景和性能
2016-01-07 16:50
369 查看
在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合。后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iterator遍历集合类的实例。不过这个实例中提到了Enumeration比Iterator的效率更高,其实并不是这样子的,该实例是的时间测试太片面了, 因为数据量太少。随着数据两的增加,两者之间的效率越来越接近,而不会出现倍数的比例。而且现在普遍都使用Iterator来遍历集合类,只有特别明确声明必须使用Enumeration的才会用该类遍历集合。
代码实例
复制代码 代码如下:
废弃的接口:Enumeration
Enumeration接口是JDK1.0时推出的,是最好的迭代输出接口,最早使用Vector(现在推荐使用ArrayList)时就是使用Enumeration接口进行输出。虽然Enumeration是一个旧的类,但是在JDK1.5之后为Enumeration类进行了扩充,增加了泛型的操作应用。[img=http://img.bbs.csdn.net/upload/201601/07/1452155971_354580.jpg][/img]
Enumeration接口常用的方法有hasMoreElements()(判断是否有下一个值)和 nextElement()(取出当前元素),这些方法的功能跟Iterator类似,只是Iterator中存在删除数据的方法,而此接口不存在删除操作。
为什么还要继续使用Enumeration接口
Enumeration和Iterator接口功能相似,而且Iterator的功能还比Enumeration多,那么为什么还要使用Enumeration?这是因为java的发展经历了很长时间,一些比较古老的系统或者类库中的方法还在使用Enumeration接口,因此为了兼容,还是需要使用Enumeration。
List接口的常用子类
List接口常用的子类有ArrayList和Vector,两者有许多相似的地方,下面给出这两者之间的比较
代码实例
复制代码 代码如下:
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类进行了扩充,增加了泛型的操作应用。[img=http://img.bbs.csdn.net/upload/201601/07/1452155971_354580.jpg][/img]
Enumeration接口常用的方法有hasMoreElements()(判断是否有下一个值)和 nextElement()(取出当前元素),这些方法的功能跟Iterator类似,只是Iterator中存在删除数据的方法,而此接口不存在删除操作。
为什么还要继续使用Enumeration接口
Enumeration和Iterator接口功能相似,而且Iterator的功能还比Enumeration多,那么为什么还要使用Enumeration?这是因为java的发展经历了很长时间,一些比较古老的系统或者类库中的方法还在使用Enumeration接口,因此为了兼容,还是需要使用Enumeration。
List接口的常用子类
List接口常用的子类有ArrayList和Vector,两者有许多相似的地方,下面给出这两者之间的比较
相关文章推荐
- 浅析iterator与指针的区别
- 浅谈javascript 迭代方法
- java使用iterator遍历指定目录示例分享
- Java设计模式之Iterator模式介绍
- php可应用于面包屑导航的迭代寻找家谱树实现方法
- JavaScript数组迭代器实例分析
- JS的数组迭代方法
- 深入解读JavaScript中的Iterator和for-of循环
- 深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
- 使用Enumeration和Iterator遍历集合类详解
- 跟老齐学Python之让人欢喜让人忧的迭代
- python使用三角迭代计算圆周率PI的方法
- Python迭代用法实例教程
- iterator 标签的使用
- notes on python
- iterator (迭代器)的应用的用法(一)
- Enumeration Vector ArrayList Iterator
- Java学习之Iterator(迭代器)的一般用法
- iterator的理解与用法
- DNS递归和迭代查询原理