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

时间:2023-01-05 11:57:51 

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

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

标签:Enumeration,遍历,Iterator
0
投稿

猜你喜欢

  • Android仿Flipboard动画效果的实现代码

    2022-07-29 13:52:02
  • Intellij IDEA中如何查看maven项目中所有jar包的依赖关系图

    2023-02-01 23:34:03
  • C#遍历指定目录下所有文件的方法

    2021-08-29 05:52:44
  • SeekBar拖动条的应用实例

    2022-01-28 05:33:34
  • C语言树与二叉树基础全刨析

    2023-01-25 16:06:57
  • 浅谈Android手机的抢红包插件

    2021-08-13 01:04:36
  • 深入讲解Java Maven配置

    2022-07-01 05:09:21
  • Mapper类中存在名称相同的方法重载报错问题

    2023-04-04 02:44:39
  • android实现图片反转效果

    2022-09-24 20:48:11
  • 详解androidstudio项目上传到github方法以及步骤

    2023-07-15 02:55:42
  • Android防止点击过快造成多次响应事件的解决方法

    2023-05-24 16:26:09
  • java基础之字符串编码知识点总结

    2023-06-20 19:05:09
  • commons fileupload实现文件上传的实例代码

    2021-08-22 16:53:00
  • C# BitArray(点矩阵)转换成int和string的方法实现

    2023-06-18 07:33:44
  • 一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

    2022-01-31 10:28:23
  • 简单实现Android读取网络图片到本地

    2021-12-20 04:31:05
  • JVM的基本介绍以及垃圾回收

    2023-12-20 02:59:51
  • SpringBoot整合阿里云短信服务的方法

    2022-03-24 18:17:11
  • dubbo将异常转换成RuntimeException的原因分析 ExceptionFilter

    2023-11-24 14:25:13
  • Java实现雪花算法的原理和实战教程

    2021-11-20 18:20:41
  • asp之家 软件编程 m.aspxhome.com