真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

for和foreach的效率對比分析

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

站在用戶的角度思考問題,與客戶深入溝通,找到于洪網(wǎng)站設(shè)計與于洪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋于洪地區(qū)。

    //for循環(huán)
    public static void main(String[] args) {
        String[] strs = {"3333", "2222", "1111"};
        List 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 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 list = new LinkedList<>();
        //ArrayList運行
//        List 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)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享題目:for和foreach的效率對比分析
瀏覽路徑:http://weahome.cn/article/ieshhg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部