Java数组和链表三种遍历效率对比

数组结构
示例代码:

    /*数组结构的三种循环遍历效率对比*/
    @org.junit.Test
    public void test13(){
        List list = new ArrayList<>(10000000);
        for(int i=0;i<1000;i++){
            list.add(i);
        }
        /*普通for循环*/
        long a = System.currentTimeMillis();
        int size = list.size();
        for(int i=0;i

以下对比结果为大概率事件,仅供参考

1000数据量下耗时结果:迭代器耗时<=增强for循环耗时<普通for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:12--ms
增强for循环耗时:7--ms
迭代器耗时:6--ms

10000数据量下耗时结果:迭代器耗时<增强for循环耗时<普通for循环耗时

普通for循环耗时:67--ms
增强for循环耗时:53--ms
迭代器耗时:47--ms

10W数据量下耗时结果:迭代器耗时<普通for循环耗时<增强for循环耗时

普通for循环耗时:540--ms
增强for循环耗时:865--ms
迭代器耗时:439--ms

30W数据量下耗时结果:迭代器耗时<=增强for循环耗时<普通for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:1855--ms
增强for循环耗时:1281--ms
迭代器耗时:1224--ms

50W数据量下耗时结果:迭代器耗时<=增强for循环耗时<普通for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:2844--ms
增强for循环耗时:2245--ms
迭代器耗时:2215--ms

100W数据量下耗时结果:迭代器耗时<增强for循环耗时<普通for循环耗时

普通for循环耗时:5149--ms
增强for循环耗时:4785--ms
迭代器耗时:4417--ms

500W数据量下耗时结果:这三种方式基本不相上下

普通for循环耗时:20698--ms
增强for循环耗时:20814--ms
迭代器耗时:20963--ms

1000W数据量下耗时结果:迭代器耗时<增强for循环耗时<普通for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:42957--ms
增强for循环耗时:39645--ms
迭代器耗时:39143--ms

链表结构
示例代码:

 /*链表结构的三种循环遍历效率对比*/
    @org.junit.Test
    public void test14(){
        LinkedList list = new LinkedList<>();
        for(int i=0;i<1000000;i++){
            list.add(i);
        }
        /*普通for循环*/
        long a = System.currentTimeMillis();
        int size = list.size();
        for(int i=0;i

以下对比结果为大概率事件,仅供参考

1000数据量下耗时结果:增强for循环耗时<=迭代器耗时<普通for循环耗时,迭代器和增强for循环基本一个数量级

普通for循环耗时:17--ms
增强for循环耗时:5--ms
迭代器耗时:7--ms

10000数据量下耗时结果:迭代器耗时<=增强for循环耗时<普通for循环耗时,迭代器和增强for循环基本一个数量级

普通for循环耗时:115--ms
增强for循环耗时:50--ms
迭代器耗时:43--ms

10W数据量下耗时结果:迭代器耗时<=普通for循环耗时<增强for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:5350--ms
增强for循环耗时:403--ms
迭代器耗时:406--ms

30W数据量下耗时结果:增强for循环耗时<迭代器耗时<普通for循环耗时,迭代器和增强for循环不相上下

普通for循环耗时:54948--ms
增强for循环耗时:1261--ms
迭代器耗时:1272--ms

50W数据量下耗时结果:迭代器耗时<=增强for循环耗时<普通for循环耗时,迭代器和增强for循环基本一个数量级

普通for循环耗时:327258--ms
增强for循环耗时:1936--ms
迭代器耗时:1986--ms

总结:

  1. 对于数组结构遍历1w以下数据量,三种遍历方式差别不大,1w以上就要根据具体数量选取合适的方式了,总体来说迭代器和增强for循环都是要优于普通for循环的
  2. 对于遍历链表结构,不管数据量多少,也不推荐使用普通for循环,普通for循环性能太慢了,迭代器和增强for循环性能相差不大,可以根据实际场景选用

你可能感兴趣的:(Java)