一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 使用Enumeration和Iterator遍歷集合類詳解

使用Enumeration和Iterator遍歷集合類詳解

2019-10-13 14:44java之家 Java教程

Enumeration和Iterator接口功能相似,而且Iterator的功能還比Enumeration多,那么為什么還要使用Enumeration

前言
在數(shù)據(jù)庫連接池分析的代碼實(shí)例中,看到其中使用Enumeration來遍歷Vector集合。后來就找了一些資料查看都有哪些方法可以遍歷集合類,在網(wǎng)上找到了如下的使用Enumeration和Iterator遍歷集合類的實(shí)例。不過這個(gè)實(shí)例中提到了Enumeration比Iterator的效率更高,其實(shí)并不是這樣子的,該實(shí)例是的時(shí)間測(cè)試太片面了, 因?yàn)閿?shù)據(jù)量太少。隨著數(shù)據(jù)兩的增加,兩者之間的效率越來越接近,而不會(huì)出現(xiàn)倍數(shù)的比例。而且現(xiàn)在普遍都使用Iterator來遍歷集合類,只有特別明確聲明必須使用Enumeration的才會(huì)用該類遍歷集合。

代碼實(shí)例

復(fù)制代碼代碼如下:


package edu.sjtu.erplab.hash;

 

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;

//一個(gè)遍歷hashtable實(shí)例
public class TraveseHashTable {
    public static void main(String[] args) {
        //初始化創(chuàng)建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();//使用枚舉獲取這個(gè)key-value對(duì)
        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();//使用迭代器獲取這個(gè)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();//使用迭代器獲取這個(gè)key-value對(duì)
        while (it2.hasNext()) {
            it2.next();
        }
        end = System.currentTimeMillis();
        System.out.println("Iterator entrySet costs " + (end - start)
                + " milliseconds");

    }
}


廢棄的接口:Enumeration 
Enumeration接口是JDK1.0時(shí)推出的,是最好的迭代輸出接口,最早使用Vector(現(xiàn)在推薦使用ArrayList)時(shí)就是使用Enumeration接口進(jìn)行輸出。雖然Enumeration是一個(gè)舊的類,但是在JDK1.5之后為Enumeration類進(jìn)行了擴(kuò)充,增加了泛型的操作應(yīng)用。

 

Enumeration接口常用的方法有hasMoreElements()(判斷是否有下一個(gè)值)和 nextElement()(取出當(dāng)前元素),這些方法的功能跟Iterator類似,只是Iterator中存在刪除數(shù)據(jù)的方法,而此接口不存在刪除操作。

為什么還要繼續(xù)使用Enumeration接口
Enumeration和Iterator接口功能相似,而且Iterator的功能還比Enumeration多,那么為什么還要使用Enumeration?這是因?yàn)閖ava的發(fā)展經(jīng)歷了很長時(shí)間,一些比較古老的系統(tǒng)或者類庫中的方法還在使用Enumeration接口,因此為了兼容,還是需要使用Enumeration。

List接口的常用子類
List接口常用的子類有ArrayList和Vector,兩者有許多相似的地方,下面給出這兩者之間的比較

使用Enumeration和Iterator遍歷集合類詳解

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 98成人 | 青青青久热国产精品视频 | 久久久久九九 | 公交车揉捏大乳呻吟喘娇 | 天天拍天天色 | 小早川怜子在线播放精品 | 久久理论片| 波多野结衣女老师 | 国产精品每日在线观看男人的天堂 | 变态女王麻麻小说在线阅读 | 91精品国产高清久久久久久91 | 九九热这里只有精品视频免费 | 996免费视频国产在线播放 | 天堂网在线.www天堂在线资源 | 成人中文字幕在线观看 | 国产成人免费片在线视频观看 | 男人边吃奶边做好爽视频免费 | 日韩亚洲国产欧美精品 | 国产播放啪视频免费视频 | 青青青在线视频 | 日本免费观看的视频在线 | 国产在线欧美精品 | 天天摸天天爽视频69视频 | 国产重口老太伦 | 国产精品九九热 | 国产一区二区免费在线 | 日韩精品一区二区三区老鸭窝 | 校花被强迫np肉高h 校服下的白嫩小乳尖h1v1 | 五月天精品在线 | 国产首页精品 | 久久热在线视频精品店 | 国产一区二区三区毛片 | 日本小网站 | 丝袜白浆 | 国产在线一区二区视频 | 久久久精品日本一区二区三区 | 亚洲国产成人资源在线桃色 | 日本视频一区在线观看免费 | 香蕉在线精品一区二区 | 黑白配高清hd在线视频 | 亚洲欧美一 |