温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

for和foreach的效率对比分析

发布时间:2021-06-18 16:54:36 来源:亿速云 阅读:140 作者:Leah 栏目:大数据

本篇文章为大家展示了for和foreach的效率对比分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

    //for循环
    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循环
    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循环没啥好说的,主要是foreach,foreach的源码如下:

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

    由于foreach是使用的迭代器的方式遍历的,所以在对最后一个数据元素进行remove操作时,会抛出异常。

    for循环运行:

        for和foreach的效率对比分析

    foreach循环运行:

        for和foreach的效率对比分析

    两者的效率差:

        采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快。

        采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。

    代码:

    //for循环与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++){
            //不输出数据,程序运行时间太短
            System.out.println(list.get(i));
        }
        long endTime=System.currentTimeMillis(); //获取结束时间
        long fortime = endTime - startTime;

        startTime=System.currentTimeMillis();   //获取开始时间
        for (int i : list){
            //不输出数据,程序运行时间太短
            System.out.println(i);
        }
        endTime=System.currentTimeMillis(); //获取结束时间
        System.out.println("for运行时间: "+fortime+"ms");
        System.out.println("foreach运行时间: "+(endTime - startTime)+"ms");
    }

    LinkedList运行结果:

        for和foreach的效率对比分析

    ArrayList运行结果:

        for和foreach的效率对比分析

上述内容就是for和foreach的效率对比分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI