enumeration与itertor

本文通过实例演示了不同方法遍历Hashtable的性能差异,包括使用Enumeration和Iterator,并提供了详细的代码实现。


原文:http://www.jb51.net/article/41183.htm

代码如下:


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` 和 `Integer` 是两个不同用途的类型,它们在 Java 中具有不同的功能和应用场景。 ### Enumeration 接口 `Enumeration` 是 Java 提供的一个接口,主要用于遍历集合中的元素。它在 JDK 1.0 中引入,是一个较早的接口。虽然它已经被 `Iterator` 取代,但在某些遗留代码中仍然可以看到它的使用。`Enumeration` 提供了两个主要方法: - `hasMoreElements()`:检查是否还有更多的元素。 - `nextElement()`:返回下一个元素。 `Enumeration` 在早期的集合类如 `Vector` 和 `Hashtable` 中被广泛使用。从 JDK 1.5 开始,`Enumeration` 支持了泛型,使得代码更加类型安全 [^1]。 ### Integer 类型 `Integer` 是 Java 中的一个包装类,用于将基本数据类型 `int` 封装为一个对象。它允许将整数值作为对象进行处理,从而可以使用对象的方法和特性。例如,`Integer` 提供了将字符串转换为整数的方法、比较两个整数的方法等。 `Integer` 类型的主要用途包括: - 将基本类型 `int` 转换为对象。 - 提供整数相关的操作方法,如字符串解析、数值比较等。 - 在集合框架中使用,因为集合框架只能存储对象,不能存储基本数据类型。 ### 主要区别 | 特性 | Enumeration | Integer | |---------------------|--------------------------------------|-------------------------------------| | 类型 | 接口 | 类(包装类) | | 用途 | 遍历集合元素 | 封装基本数据类型 `int` | | 方法 | `hasMoreElements()`、`nextElement()` | 提供字符串解析、数值比较等方法 | | 集合支持 | 早期集合类如 `Vector` 使用 | 用于集合中存储整数对象 | | 泛型支持 | 从 JDK 1.5 开始支持 | 从 JDK 1.5 开始支持 | | 线程安全性 | 不直接涉及线程安全 | 不直接涉及线程安全 | ### 使用场景 - **Enumeration**:适用于需要遍历集合元素的场景,尤其是在处理遗留代码时。尽管 `Iterator` 已经成为更常用的选择,但在某些特定的情况下,`Enumeration` 仍然是一个有效的工具 [^1]。 - **Integer**:适用于需要将整数作为对象处理的场景,例如在集合框架中存储整数或需要使用 `Integer` 提供的额外功能时 [^1]。 ### 示例代码 以下是一个使用 `Enumeration` 的示例: ```java import java.util.Enumeration; import java.util.Vector; public class EnumerationExample { public static void main(String[] args) { Vector<Integer> vector = new Vector<>(); vector.add(1); vector.add(2); vector.add(3); Enumeration<Integer> enumeration = vector.elements(); while (enumeration.hasMoreElements()) { System.out.println(enumeration.nextElement()); } } } ``` 以下是一个使用 `Integer` 的示例: ```java public class IntegerExample { public static void main(String[] args) { Integer num1 = Integer.valueOf(10); Integer num2 = new Integer("20"); System.out.println("num1: " + num1); System.out.println("num2: " + num2); int sum = num1 + num2; System.out.println("Sum: " + sum); } } ``` ### 总结 `Enumeration` 和 `Integer` 在功能和用途上有显著的区别。`Enumeration` 主要用于遍历集合中的元素,而 `Integer` 则用于将基本数据类型 `int` 封装为对象。理解它们的差异有助于在不同的编程场景中选择合适的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值