从for循环与foreach循环遍历集合的效率来看待ArrayList、LinkedList的区别

本文通过分析ArrayList和LinkedList的源码,探讨for循环与foreach循环遍历这两种数据结构的效率差异。在ArrayList中,for循环更优;而在LinkedList中,由于其链表结构,foreach循环(迭代器)表现更好。总结建议避免在LinkedList中使用for循环。
摘要由CSDN通过智能技术生成

1. 前言

同事问了一个面试人员的面试题,for循环与foreach循环哪个遍历数组更快? 面试人员没有回答出来,我们就此来分析一下,到底哪个更快。 以及为什么更快,数组之间的区别有哪些。

2. for循环与foreach循环哪个遍历数组更快

先搞一段代码来看

public static void main(String[] args) {
   
        // 创建两个list数组,一个为arrayList,一个为linkedList
        List<String> stringLinkedList = new LinkedList<String>();
        List<String> stringArrayList = new ArrayList<String>();
        // 插入10w条数据
        for (int i = 0; i < 100000; i++) {
   
            stringLinkedList.add(String.valueOf(i));
            stringArrayList.add(String.valueOf(i));
        }
        String hhh = null;
        // 1、用for循环遍历ArrayList
        long forArrayMillis = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
   
            hhh = stringArrayList.get(i);
        }
        System.err.println("用for循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - forArrayMillis) + " ms");
        // 2、用foreach循环遍历ArrayList
        long foreachArrayMillis = System.currentTimeMillis();
        for (String string : stringArrayList) {
   
            hhh = string;
        }
        System.err.println("用foreach循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachArrayMillis) + " ms");
        // 3、用for循环遍历LinkedList
        long forLinkedMillis = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
   
            hhh = stringLinkedList.get(i);
        }
        System.err.println("用for循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - forLinkedMillis) + " ms");
        // 4、用foreach循环遍历LinkedList
        long foreachLinkedMillis = System.currentTimeMillis();
        for (String string : stringLinkedList) {
   
            hhh = string;
        }
        System.err.println("用foreach循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachLinkedMillis) + " ms");
    }

输出结果

for循环遍历ArrayList,耗时:2 ms
用foreach循环遍历ArrayList,耗时:3 ms
用for循环遍历LinkedList,耗时:16215 ms
用foreach循环遍历LinkedList,耗时:4 ms

这样来看
在循环ArrayList时,10W条数据,相差并不大,但是相比较来说,还是for循环更快一些。多运行几次,相差时间可以达到2ms(for循环),4ms(foreach循环)。
在循环LinkedList时,明显可以看出来foreach更快,耗时相差较大。

3. 为什么会出现这种情况?

首先,我们来分析一下源码,可能太长,大家可以快速翻阅的看。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值