程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 應用Enumeration和Iterator遍歷聚集類詳解

應用Enumeration和Iterator遍歷聚集類詳解

編輯:關於JAVA

應用Enumeration和Iterator遍歷聚集類詳解。本站提示廣大學習愛好者:(應用Enumeration和Iterator遍歷聚集類詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是應用Enumeration和Iterator遍歷聚集類詳解正文


媒介
在數據庫銜接池剖析的代碼實例中,看到個中應用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,二者有很多類似的處所,上面給出這二者之間的比擬

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved