我是靠谱客的博主 内向金鱼,最近开发中收集的这篇文章主要介绍关于普通for循环和增强for循环,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么时候使用普通for循环,什么时候使用增强for循环

首先,增强for循环的写法比普通for循环简便,不过我们还得考虑效率。

--->首先,我们先看结论:

对于基本数组类的遍历,两者的效率是相同的;

对于ArrayList的遍历,普通for循环的效率高于增强for循环;

对于LinkedList的遍历,增强for循环的效率高于普通for循环。

 

--->然后,我们来看验证:

        int[] intArray = new int[100000];
        List<Integer> intArrayList = new ArrayList<>();
        List<Integer> intLinkedList = new LinkedList<>();
        for (int i = 0; i < 100000; i++) {
            intArray[i] = i;
            intArrayList.add(i);
            intLinkedList.add(i);
        }
        
        int a = 0;
        
        System.out.println("======遍历stringArray======");
        
        //用for循环stringArray
        long forStartTime = System.currentTimeMillis();
        for (int i = 0; i < intArray.length; i++) {
            a = intArray[i];
        }
        long forEndTime = System.currentTimeMillis();
        System.out.println("普通for循环需要:" + (forEndTime - forStartTime) + "毫秒");

        //用增强for循环stringArray
        long forUpStartTime = System.currentTimeMillis();
        for (Integer i: intArray) {
            a = i;
        }
        long forUpEndTime = System.currentTimeMillis();
        System.out.println("增强for循环需要:" + (forUpEndTime - forUpStartTime) + "毫秒");

        System.out.println("======遍历stringArrayList======");

        //用for循环stringArrayList
        long forStartTime2 = System.currentTimeMillis();
        for (int i = 0; i < intArrayList.size(); i++) {
            a = intArrayList.get(i);
        }
        long forEndTime2 = System.currentTimeMillis();
        System.out.println("普通for循环需要:" + (forEndTime2 - forStartTime2) + "毫秒");

        //用增强for循环stringArrayList
        long forUpStartTime2 = System.currentTimeMillis();
        for (Integer i: intArrayList) {
            a = i;
        }
        long forUpEndTime2 = System.currentTimeMillis();
        System.out.println("增强for循环需要:" + (forUpEndTime2 - forUpStartTime2) + "毫秒");

        System.out.println("======遍历stringLinkedList======");

        //用for循环stringLinkedList
        long forStartTime3 = System.currentTimeMillis();
        for (int i = 0; i < intLinkedList.size(); i++) {
            a = intLinkedList.get(i);
        }
        long forEndTime3 = System.currentTimeMillis();
        System.out.println("普通for循环需要:" + (forEndTime3 - forStartTime3) + "毫秒");

        //用增强for循环stringLinkedList
        long forUpStartTime3 = System.currentTimeMillis();
        for (Integer i: intLinkedList) {
            a = i;
        }
        long forUpEndTime3 = System.currentTimeMillis();
        System.out.println("增强for循环需要:" + (forUpEndTime3 - forUpStartTime3) + "毫秒");
I/System.out: ======遍历stringArray======
I/System.out: 普通for循环需要:1毫秒
I/System.out: 增强for循环需要:1毫秒
I/System.out: ======遍历stringArrayList======
I/System.out: 普通for循环需要:2毫秒
I/System.out: 增强for循环需要:2毫秒
I/System.out: ======遍历stringLinkedList======
I/System.out: 普通for循环需要:4411毫秒
I/System.out: 增强for循环需要:6毫秒

可以佐证上述结论。

并且我们尤其需要关注:

使用LinkedList时,普通for循环比增强for循环花费的时间要多很多,甚至会导致程序直接卡死。

 

写在最后:

ArrayList是采用数组的形式保存对象的,这种方式将对象放在连续的内存块中,所以插入和删除时比较麻烦,

查询比较方便。

LinkedList是将对象放在独立的空间中,而且每个空间中还保留下一个空间的索引,也就是数据结构中的链表结构,

插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。

至于为什么使用LinkedList时,普通for循环耗时比增强for循环多那么多,这是因为他们的实现不同,具体可以参考

下面这篇文章https://www.jianshu.com/p/f770ea3e7181

最后

以上就是内向金鱼为你收集整理的关于普通for循环和增强for循环的全部内容,希望文章能够帮你解决关于普通for循环和增强for循环所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部