千家信息网

for和foreach的效率对比分析

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,本篇文章为大家展示了for和foreach的效率对比分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 //for循环 public static
千家信息网最后更新 2025年02月12日for和foreach的效率对比分析

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

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

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

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

for循环运行:

foreach循环运行:

两者的效率差:

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

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

代码:

    //for循环与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++){            //不输出数据,程序运行时间太短            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运行结果:

ArrayList运行结果:

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

0