溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

for和foreach的效率對比分析

發(fā)布時間:2021-06-18 16:54:36 來源:億速云 閱讀:140 作者:Leah 欄目:大數(shù)據(jù)

本篇文章為大家展示了for和foreach的效率對比分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

    //for循環(huán)
    public static void main(String[] args) {
        String[] strs = {"3333", "2222", "1111"};
        List<String> list = Arrays.asList(strs);
        list = new ArrayList<>(list);
        for (int i = 0; i < list.size(); i++){
            String str = list.get(i);
            if (i == 2){
                list.remove(str);
                continue;
            }
            System.out.println(str);
        }
    }
    //foreach循環(huán)
    public static void main(String[] args) {
        String[] strs = {"3333", "2222", "1111"};
        List<String> list = Arrays.asList(strs);
        list = new ArrayList<>(list);
        for (String str: list){
            if (str.equals("1111")){
                //異常拋出點
                list.remove(str);
                continue;
            }
            System.out.println(str);
        }
    }

    先從原理上進行分析,for循環(huán)沒啥好說的,主要是foreach,foreach的源碼如下:

        //使用迭代器的next方法遍歷
        for (Iterator localIterator = list.iterator(); localIterator.hasNext(); ) {
            //do something...
        }

    由于foreach是使用的迭代器的方式遍歷的,所以在對最后一個數(shù)據(jù)元素進行remove操作時,會拋出異常。

    for循環(huán)運行:

        for和foreach的效率對比分析

    foreach循環(huán)運行:

        for和foreach的效率對比分析

    兩者的效率差:

        采用ArrayList對隨機訪問比較快,而for循環(huán)中的get()方法,采用的即是隨機訪問的方法,因此在ArrayList里,for循環(huán)較快。

        采用LinkedList則是順序訪問比較快,iterator中的next()方法,采用的即是順序訪問的方法,因此在LinkedList里,使用iterator較快。

    代碼:

    //for循環(huán)與foreach效率對比
    public static void main(String[] args) {
        //LinkedList運行
        List<Integer> list = new LinkedList<>();
        //ArrayList運行
//        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 100000; i++){
            list.add(i);
        }


        long startTime=System.currentTimeMillis();   //獲取開始時間
        for (int i = 0; i < list.size(); i++){
            //不輸出數(shù)據(jù),程序運行時間太短
            System.out.println(list.get(i));
        }
        long endTime=System.currentTimeMillis(); //獲取結(jié)束時間
        long fortime = endTime - startTime;

        startTime=System.currentTimeMillis();   //獲取開始時間
        for (int i : list){
            //不輸出數(shù)據(jù),程序運行時間太短
            System.out.println(i);
        }
        endTime=System.currentTimeMillis(); //獲取結(jié)束時間
        System.out.println("for運行時間: "+fortime+"ms");
        System.out.println("foreach運行時間: "+(endTime - startTime)+"ms");
    }

    LinkedList運行結(jié)果:

        for和foreach的效率對比分析

    ArrayList運行結(jié)果:

        for和foreach的效率對比分析

上述內(nèi)容就是for和foreach的效率對比分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI