zoukankan      html  css  js  c++  java
  • foreach与正常for循环效率对比

    /**
     * 测试for与froEach效率
     * @author 15735400536
     *
     */
    public class TestList {
    	public static void main(String[] args) {
    		List<Integer> array = new ArrayList<Integer>();
    		List<Integer> link = new LinkedList<Integer>();
    		
    		long startTime = 0;
    		long endTime = 0;
    		
    		startTime=System.currentTimeMillis();
    		for(int i=0; i<100000; i++) {
    			array.add(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("ArrayList add 花费时间: " + (endTime - startTime));
    		
    		startTime=System.currentTimeMillis();
    		for(int i=0; i<100000; i++) {
    			link.add(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("LinkedList add 花费时间: " + (endTime - startTime));
    		
    		startTime=System.currentTimeMillis();
    		for(int i=0; i<100000; i++) {
    			array.get(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("for 遍历  ArrayList get 花费时间: " + (endTime - startTime));
    		
    		startTime=System.currentTimeMillis();
    		for(int i=0; i<100000; i++) {
    			link.get(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("for 遍历 LinkedList get 花费时间: " + (endTime - startTime));
    		
    		startTime=System.currentTimeMillis();
    		for(int i : array) {
    			//System.out.println(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("forEach 遍历  ArrayList get 花费时间: " + (endTime - startTime));
    		
    		startTime=System.currentTimeMillis();
    		for(int i : link) {
    			//System.out.println(i);
    		}
    		endTime=System.currentTimeMillis();
    		System.out.println("forEach 遍历 LinkedList get 花费时间: " + (endTime - startTime));
    	}
    }

    用for循环arrayList 10万次花费时间:2毫秒。 用foreach循环arrayList 10万次花费时间:3毫秒。 用for循环linkList 10万次花费时间:6163毫秒。 用foreach循环linkList 10万次花费时间:4毫秒。

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

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

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

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

    结论:

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

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

  • 相关阅读:
    c++ 在window下创建窗口的基本步骤
    visual studio 2015 安装MSDN全称Microsoft Developer Network 安装离线的MSDN
    interp1一维数据插值在matlab中的用法
    Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别
    C# 中的延时的方法。
    C#入门——Console.Write()与Console.WriteLine()
    php发送短信验证码
    来自联想、百度的团队,带着颠覆的理想,做短信服务平台
    python发送短信验证码
    uperTextView-从未如此惊艳!一个超级的TextView
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11069719.html
Copyright © 2011-2022 走看看