关闭

使用Enumeration和Iterator遍历集合类

157人阅读 评论(0) 收藏 举报
分类:

前言

  在数据库连接池分析的代码实例中,看到其中使用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类使用的更多。


原文地址:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526268.html

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iterator、for遍历集合的优缺点

对于在内存中存储空间为连续的集合,如ArrayList、数组,可以采用以下三种方式进行遍历: 1、iterator 迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ...
  • maozhr720
  • maozhr720
  • 2017-07-27 22:39
  • 457

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

前言 在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合。后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iter...
  • a519781181
  • a519781181
  • 2017-02-03 16:32
  • 116

枚举类Enumeration的使用以及与iterator的区别

ps:iterator和枚举类的区别 1.iterator多了一个删除元素的api 2.其次在定义名称上貌似改进了些 下面是转载的枚举类使用: Enumeration  En...
  • techbirds_bao
  • techbirds_bao
  • 2013-01-22 13:45
  • 6594

Iterator遍历集合特点

Java中使用Iterator来遍历集合元素,Iterator遍历集合元素有以下几个特点:  Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentMo...
  • qq_20916555
  • qq_20916555
  • 2016-05-01 22:43
  • 1669

Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)

学习目标: 掌握集合输出的标准操作。 掌握Iterator接口的主要作用及使用注意事项。 掌握ListIterator与Iterator接口的关系及区别。 掌握ListIterator接口的使用限制。...
  • u013087513
  • u013087513
  • 2016-08-18 17:42
  • 2400

Java 获取Enumeration类型的集合方法

创建一个Enumeration集合: 今天看到老师上课用到了下述的第二种方法,然后也提到了第一种方法,我感觉还是有必要记录一下,以后还会记录更过。   说明: 我们知道Enumeration是一个接口...
  • hua631150873
  • hua631150873
  • 2013-09-14 23:54
  • 3532

通过Iterator遍历List

使用Iterator 遍历器对List集合进行遍历
  • SelonLiao
  • SelonLiao
  • 2014-10-19 14:33
  • 3256

iterator类的方法说明

迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。 [java] view plain copy  print? ...
  • qq_15037231
  • qq_15037231
  • 2016-04-22 20:49
  • 1151

Iterator迭代器-ListIterator-Enumeration枚举类接口的特点和区别

Iterator迭代器-ListIterator-Enumeration枚举类接口的特点和区别 1、Iterator的特点:     API中是这样解释的: 对collection进行迭代的迭代器。它...
  • u014344668
  • u014344668
  • 2015-04-25 11:22
  • 1427

遍历list 集合 使用 iterator 和get 谁更快速?

Java code ? 1 2 3 4 5 6 ----------测试ArrayList----------- ...
  • u014704496
  • u014704496
  • 2014-06-25 09:49
  • 649
    个人资料
    • 访问:351722次
    • 积分:4965
    • 等级:
    • 排名:第6639名
    • 原创:42篇
    • 转载:722篇
    • 译文:0篇
    • 评论:14条
    最新评论