使用Enumeration和Iterator遍历集合类详解

 更新时间:2013年09月06日 17:23:46   作者:  
Enumeration和Iterator接口功能相似,而且Iterator的功能还比Enumeration多,那么为什么还要使用Enumeration

前言
在数据库连接池分析的代码实例中,看到其中使用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,两者有许多相似的地方,下面给出这两者之间的比较

相关文章

  • Java设计模式之外观模式(Facade模式)介绍

    Java设计模式之外观模式(Facade模式)介绍

    这篇文章主要介绍了Java设计模式之外观模式(Facade模式)介绍,外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,需要的朋友可以参考下
    2015-03-03
  • 基于Servlet实现技术问答网站系统

    基于Servlet实现技术问答网站系统

    这篇文章主要为大家详细介绍了基于Servlet实现技术问答网站系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • java WebSocket的实现以及Spring WebSocket示例代码

    java WebSocket的实现以及Spring WebSocket示例代码

    本篇文章主要介绍了java WebSocket的实现以及Spring WebSocket,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • spring mvc中@PathVariable / 带斜杠方式获取

    spring mvc中@PathVariable / 带斜杠方式获取

    这篇文章主要介绍了spring mvc中@PathVariable / 带斜杠方式获取,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java线程中的ThreadLocal类解读

    Java线程中的ThreadLocal类解读

    这篇文章主要介绍了Java线程中的ThreadLocal类解读,ThreadLocal是一个泛型类,作用是实现线程隔离,ThreadLocal类型的变量,在每个线程中都会对应一个具体对象,对象类型需要在声明ThreadLocal变量时指定,需要的朋友可以参考下
    2023-11-11
  • java中sleep方法和wait方法的五个区别

    java中sleep方法和wait方法的五个区别

    这篇文章主要介绍了java中sleep方法和wait方法的五个区别,sleep 方法和 wait 方法都是用来将线程进入休眠状态,但是又有一些区别,下面我们就一起来看看吧
    2022-05-05
  • Java中弱引用和软引用的区别以及虚引用和强引用介绍

    Java中弱引用和软引用的区别以及虚引用和强引用介绍

    很早Java API就添加了弱引用(WeakReference)和软引用(SoftReference),但并不是所有的程序员都熟悉这两个概念
    2014-04-04
  • 基于SSM实现学生管理系统

    基于SSM实现学生管理系统

    这篇文章主要为大家详细介绍了基于SSM实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 解析Spring 漏洞及其修复方案

    解析Spring 漏洞及其修复方案

    官宣了最近网传的Spring漏洞。攻击者利用该漏洞,可在未授权的情况下远程执行命令,今天通过本文给大家普及下漏洞分析影响范围及解决方案,感兴趣的朋友跟随小编一起看看吧
    2022-04-04
  • RocketMQ Broker如何保存消息源码解析

    RocketMQ Broker如何保存消息源码解析

    这篇文章主要为大家介绍了RocketMQ源码分析Broker如何保存消息详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论