当前位置: 移动技术网 > IT编程>开发语言>Java > 使用Enumeration和Iterator遍历集合类详解

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网