`

使用Enumeration和Iterator遍历集合类

    博客分类:
  • java
 
阅读更多
前言

  在数据库连接池分析的代码实例中,看到其中使用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遍历集合类详解

    例如,`Vector` 和 `Hashtable` 这些旧的集合类仍然支持 `Enumeration`,但在新代码中,应尽量避免使用这些过时的集合类型,转而使用 `ArrayList`、`HashMap` 等现代集合类,它们默认支持 `Iterator`。 总结来说,`...

    详谈Enumeration接口和Iterator接口的区别

    在Java编程语言中,`Enumeration`接口和`Iterator`接口都是用于遍历集合对象的工具,但它们之间存在显著的差异。下面是关于这两个接口详细的区别分析: 1. **函数接口不同** `Enumeration`接口提供了两个方法: -...

    Java集合类面试题.docx

    Iterator是遍历集合的接口,提供了添加、删除和访问元素的方法,它是Java集合框架的核心部分。 8. **Enumeration和Iterator接口的区别?** Enumeration仅存在于早期的Java版本,用于遍历Vector和Hashtable。...

    大学课程讲义-Java基础-Java集合.pptx

    Iterator 接口是 Java 集合框架中用于遍历集合元素的接口,提供了 hasNext() 和 next() 两个方法,用于遍历集合中的元素。使用 Iterator 接口可以隐藏集合实现类的底层细节,提供统一的遍历集合元素的编程接口。 ...

    30个Java经典的集合面试题!.pdf

    * 使用核心集合类降低开发成本,而非实现我们自己的集合类。 * 随着使用经过严格测试的集合框架类,代码质量会得到提高。 * 通过使用JDK附带的集合类,可以降低代码维护成本。 * 复用性和可操作性。 3. 集合框架中...

    java讲解scjp

    它们都是用来遍历集合或数组的元素,但是它们有着不同的使用场景和实现方式。 Enumeration 接口 Enumeration 接口是 Java 中的一种古老的迭代输出方法,它定义了可以对一个对象的类集中的元素进行枚举(一次获得一...

    javaAPI学习总结

    本文将重点关注Java的基础知识,特别是数据类型编程和集合类的使用。 一、数据类型编程 在Java中,数据类型分为基本数据类型和引用数据类型。在给定的例子中,展示了如何通过命令行参数传递值并使用它们来创建矩形...

    30 个 Java 集合面试问题及答案.docx

    Iterator接口是用于遍历集合的工具,它可以安全地在迭代过程中移除元素。相比于Enumeration,Iterator具有更好的线程安全性,并且提供了移除元素的能力。而Enumeration只提供遍历和获取元素的功能,不支持在迭代期间...

    java 集合

    6. Enumeration枚举器:在较旧的API中,有些集合使用Enumeration接口来遍历元素,但它不具备Iterator的删除功能。 7. 泛型:Java的泛型机制使得集合可以安全地存储特定类型的对象,避免了类型转换异常,增强了代码...

    Java 实例 - 遍历 HashTable 的键值源代码+详细教程.zip

    遍历`HashTable`通常有两种方法:一种是通过` Enumeration`接口,另一种是使用Java 5及以上版本引入的`Iterator`接口。 1. **使用`Enumeration`遍历**: `HashTable`提供两个方法,`keys()`返回键的枚举对象,`...

    IteratorPattern 迭代设计模式

    这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类库,如ArrayList、LinkedList等。 **迭代器模式的核心组成**: 1. **迭代器接口(Iterator ...

    JAVA基础-集合类

    - **Iterator迭代器**:所有Collection集合都支持迭代器,它是遍历集合的标准方式。 - **增强for循环**:也称为foreach循环,简化了迭代过程,适用于所有实现了Iterable接口的集合。 - **Enumeration**:仅适用于...

    JAVA集合类[参考].pdf

    `Iterator`接口是遍历集合的标准方式,提供了`hasNext()`和`next()`方法来访问集合的元素,并通过`remove()`方法删除元素。迭代器取代了旧的`Enumeration`接口,使得遍历更加灵活。 总结来说,Java集合框架中的`Set...

    java集合深度学习

    Hashtable使用Enumeration接口进行遍历,而HashMap使用迭代器(Iterator)接口,这是Java集合框架的标准遍历方式。迭代器提供了更强大的功能,如remove()方法,可以直接删除当前遍历的元素。 在哈希表的初始化和扩...

    javase集合 温故而知新.doc

    javase集合 温故而知新 ...Iterator接口用于遍历集合,Enumeration接口用于枚举集合,Stack接口用于实现栈结构。 javase集合为Java语言提供了强大的数据结构和操作方法,方便了开发者的编程工作。

    Java集合框架使用总结.pdf

    它是遍历集合元素的标准方式,取代了旧的Enumeration。Iterator提供了next()和hasNext()方法来访问集合中的元素,同时支持remove()方法移除元素。ListIterator是Iterator的子接口,专用于List,它支持双向遍历和修改...

Global site tag (gtag.js) - Google Analytics