zoukankan      html  css  js  c++  java
  • Java for循环和foreach循环的性能比较

    就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了?

    两种循环的语法格式:

    普通for循环语法:

    [java] view plain copy
     
    1. for (int i = 0; i < integers.length; i++) {  
    2.     System.out.println(intergers[i]);  
    3. }  


    foreach 循环语法:

    [java] view plain copy
     
    1. for(Integer in : integers){  
    2.     System.out.println(in);  
    3. }  

     

    今天我们来比较一下两种for循环对ArrayList和LinkList集合的循环性能比较。首先简单的了解一下ArrayList和LinkList的区别:

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

    LinkList:LinkList是将对象放在独立的空间中,而且每个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。

    下面是我测试的代码:

    [java] view plain copy
     
    1. public class Main {  
    2.       
    3.     public static void main(String[] args){  
    4.         //实例化arrayList  
    5.         List<Integer> arrayList = new ArrayList<Integer>();  
    6.         //实例化linkList  
    7.         List<Integer> linkList = new LinkedList<Integer>();  
    8.       
    9.         //插入10万条数据  
    10.         for (int i = 0; i < 100000; i++) {  
    11.             arrayList.add(i);  
    12.             linkList.add(i);  
    13.         }  
    14.           
    15.         int array = 0;  
    16.         //用for循环arrayList  
    17.         long arrayForStartTime = System.currentTimeMillis();  
    18.         for (int i = 0; i < arrayList.size(); i++) {  
    19.             array = arrayList.get(i);  
    20.         }  
    21.         long arrayForEndTime = System.currentTimeMillis();  
    22.         System.out.println("用for循环arrayList 10万次花费时间:" + (arrayForEndTime - arrayForStartTime) + "毫秒");  
    23.           
    24.         //用foreach循环arrayList  
    25.         long arrayForeachStartTime = System.currentTimeMillis();  
    26.         for(Integer in : arrayList){  
    27.             array = in;  
    28.         }  
    29.         long arrayForeachEndTime = System.currentTimeMillis();  
    30.         System.out.println("用foreach循环arrayList 10万次花费时间:" + (arrayForeachEndTime - arrayForeachStartTime ) + "毫秒");  
    31.           
    32.         //用for循环linkList  
    33.         long linkForStartTime = System.currentTimeMillis();  
    34.         int link = 0;  
    35.         for (int i = 0; i < linkList.size(); i++) {  
    36.             link = linkList.get(i);  
    37.         }  
    38.         long linkForEndTime = System.currentTimeMillis();  
    39.         System.out.println("用for循环linkList 10万次花费时间:" + (linkForEndTime - linkForStartTime) + "毫秒");  
    40.           
    41.         //用froeach循环linkList  
    42.         long linkForeachStartTime = System.currentTimeMillis();  
    43.         for(Integer in : linkList){  
    44.             link = in;  
    45.         }  
    46.         long linkForeachEndTime = System.currentTimeMillis();  
    47.         System.out.println("用foreach循环linkList 10万次花费时间:" + (linkForeachEndTime - linkForeachStartTime ) + "毫秒");  
    48.     }  
    49. }  

    循环10万次的时候,控制台打印结果:

    [java] view plain copy
     
    1. for循环arrayList 10万次花费时间:5毫秒  
    2. 用foreach循环arrayList 10万次花费时间:7毫秒  
    3. for循环linkList 10万次花费时间:4481毫秒  
    4. 用foreach循环linkList 10万次花费时间:5毫秒  


    可以看出,循环ArrayList时,普通for循环比foreach循环花费的时间要少一点;循环LinkList时,普通for循环比foreach循环花费的时间要多很多。

    当我将循环次数提升到一百万次的时候,循环ArrayList,普通for循环还是比foreach要快一点;但是普通for循环在循环LinkList时,程序直接卡死。

    结论:需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。

    需要循环链表结构的数据时,一定不要使用普通for循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/suneryong/p/6520442.html
Copyright © 2011-2022 走看看