list遍历方式效率分析

来源:互联网 发布:mac磁盘映像怎么删除 编辑:程序博客网 时间:2024/06/18 06:31
package list;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class ListTest {    public static void main(String[] args) {        List<Object> list=new ArrayList<>();        //List<Object> list=new LinkedList<>();        long begin,end;        Object temp;        begin=System.currentTimeMillis();        for (int i = 0; i < 10000000; i++) {            list.add("第"+i+"个元素");        }        end=System.currentTimeMillis();        System.out.println("创建list耗时:"+(end-begin)+"ms");        System.out.println("---------------------");        /**         * foreach 方式         */        begin=System.currentTimeMillis();        for (Object object : list) {           temp=object;             }        end=System.currentTimeMillis();        System.out.println("foreach耗时:"+(end-begin)+"ms");        System.out.println("---------------------");        /**         * 迭代器方式         */        begin=System.currentTimeMillis();        Iterator<Object> iterator=list.iterator();        while (iterator.hasNext()) {            temp=iterator.next();        }        end=System.currentTimeMillis();        System.out.println("iterator耗时:"+(end-begin)+"ms");        System.out.println("---------------------");        /**         * 普通for循环         */        begin=System.currentTimeMillis();        for (int i = 0; i <list.size(); i++) {              temp=list.get(i);        }        end=System.currentTimeMillis();        System.out.println("for耗时:"+(end-begin)+"ms");        System.out.println("---------------------");    }}

添加10000000条测试数据,测试结果:

第一次运行:创建list耗时:12767ms---------------------foreach耗时:30ms---------------------iterator耗时:27ms---------------------for耗时:7ms---------------------第二次运行:创建list耗时:7959ms---------------------foreach耗时:28ms---------------------iterator耗时:26ms---------------------for耗时:7ms---------------------

多次运行后,结果差别不大,foreach和iterator效率差不多,普通for循环效率最高。编译过程中,编译器将foreach循环体作为迭代器处理,二者完全等价,不过在foreach循环中,有一步不必要的赋值,导致效率比迭代器差一点,而for循环中,通过随机访问遍历列表,arraylist是基于数组实现的,所以随机访问的速度非常快,因此效率也非常高。所以遍历arraylist时,优先考虑for循环。

0 0
原创粉丝点击