`
sanyecao2314
  • 浏览: 134741 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

不恰当的使用for循环,会使速度慢千倍

阅读更多

测试发现,不恰当的使用for循环语法,会使查询效率慢千倍.谨记.

 

	/**
	 * TODO 测试发现.两种不同的for写法,list中46000条数据.效率差了1000多倍.
	 * 
	 * 2016年4月6日
	 * novelbio fans.fan
	 */
	public void testArray() {
		String filePathAndName = "GO-Analysis_BP_peak0_All.xlsx";

		List<List<String>> lsExcel = ExcelOperate.readLsExcel2007SheetFast(filePathAndName, 2);
		Object[] array = lsExcel.toArray();
		
		long time2 = System.currentTimeMillis();
		//第一种for写法
		List<String> lsContent = null;
		for (int i = 0; i < lsExcel.size(); i++) {
			lsContent = lsExcel.get(i);
			int len = lsContent.size();
		}
		long time3 = System.currentTimeMillis();
		System.out.println("process data=" + (time3 - time2));
		
		long time4 = System.currentTimeMillis();
		//第二种for写法
		for (List<String> lsData : lsExcel) {
			int len = lsData.size();
		}
		long time5 = System.currentTimeMillis();
		System.out.println("process2 data=" + (time5 - time4));
	}
	
	public void testArray2() {
		String filePathAndName = "GO-Analysis_BP_peak0_All.xlsx";

		List<List<String>> lsExcel = ExcelOperate.readLsExcel2007SheetFast(filePathAndName, 2);
		Object[] array = lsExcel.toArray();
		
		long time2 = System.currentTimeMillis();
		//第一种for写法
		List<String> lsContent = null;
		for (int i = 0; i < array.length; i++) {
			lsContent = (List<String>) array[i];
			int len = lsContent.size();
		}
		long time3 = System.currentTimeMillis();
		System.out.println("testArray2 process data=" + (time3 - time2));
		
		long time4 = System.currentTimeMillis();
		//第二种for写法
		lsContent = null;
		for (Object lsData : array) {
			lsContent = (List<String>) lsData;
			int len = lsContent.size();
		}
		long time5 = System.currentTimeMillis();
		System.out.println("testArray2 process2 data=" + (time5 - time4));
	}
	
	public void testArray3() {

		List<Integer> lsExcel = new ArrayList<>(50000);
		for(int i = 0; i < 50000; i++){
			lsExcel.add((int)(Math.random() * 10000));
		}
		
		long time2 = System.currentTimeMillis();
		//第一种for写法
		for (int i = 1; i < lsExcel.size(); i++) {
			int a = lsExcel.get(i);
			int len = a;
		}
		long time3 = System.currentTimeMillis();
		System.out.println("testArray3 process data=" + (time3 - time2));
		
		long time4 = System.currentTimeMillis();
		lsExcel.remove(0);
		//第二种for写法.
		for (Integer a : lsExcel) {
			int len = a;
		}
		long time5 = System.currentTimeMillis();
		System.out.println("testArray3 process2 data=" + (time5 - time4));
	}

执行结果.

process data=7804
process2 data=5
testArray2 process data=4
testArray2 process2 data=3
testArray3 process data=3
testArray3 process2 data=1

如 http://www.jianshu.com/p/2fecd8d66829所说对于用数组实现的,建议用普通的for循环,从该例测试来看.实际差距也不大.

但如果是list嵌套类型的.用普通for循环会慢上千倍.

分享到:
评论

相关推荐

    如何提升JavaScript的运行速度(循环篇).doc

    循环是JavaScript代码中常见的结构,但是不恰当的循环设计可能会严重拖慢程序运行速度,甚至导致浏览器出现“脚本失控”的警告。以下是对如何优化JavaScript循环的一些关键点的详细说明: 1. **避免在循环体中执行...

    matlab编程计算速度能提高100倍慢的原因是使用不对-matlab编程,计算速度能提高100倍。慢的原因,是使用不对.doc

    在MATLAB编程中,计算速度的提升潜力巨大,但为何有些程序执行效率低下,甚至比预期慢了100倍?这通常与编程方法密切相关,尤其是处理稀疏矩阵时。本文将探讨这个问题,并提供改进策略。 首先,让我们明确一点:...

    循环结构教学设计

    循环结构是算法与程序设计中的一种基本控制结构,教学设计的目标是让学生掌握 For/Next 循环语句的格式和执行步骤,并能够分析简单的 For/Next 循环语句的功能。教师可以通过实例选择,分析设计算法,恰当地使用三种...

    Lua中数字for循环实例

    因此,在循环体内对循环变量的任何修改都只是在改变当前循环迭代的局部变量(`externalindex`),并不会影响到下一次迭代的值。 在Lua的源代码层面,`internalindex`和`externalindex`虽然名称相同,但实际上是不同...

    第3章 循环

    【循环】是编程语言中的重要控制结构之一,用于重复执行某段代码,直到满足特定条件为止。在C语言中,循环主要包括以下几种形式: ...同时,掌握如何在循环中恰当使用break和continue,能更灵活地控制循环行为。

    java代码-for循环嵌套练习。

    在Java编程语言中,`for`循环是一...总之,`for`循环嵌套是Java编程中不可或缺的一部分,它帮助我们处理多维度的数据结构和复杂的逻辑。通过不断练习和理解,你可以更好地掌握这一技巧,从而写出更加高效和优雅的代码。

    C语言循环结构教学设计方案.doc

    1.循环语句的分类和定义For循环、while循环和do-while循环特点:在一个程序中可以通过变换语句来使用不同的循环语句,而不改变程序的功能。 2.循环语句的引用例如:要从1累加到100使用For循环:for(sum,=0,i=1;i...

    恰当使用草稿纸.doc

    标题和描述中提到的主题是关于小学生如何恰当使用草稿纸以提高计算的正确率。研究表明,学生的计算正确率与其是否具备良好的草稿习惯密切相关。草稿纸的使用不当,如不使用草稿纸、随意找地方写字、使用不规则的纸张...

    Java循环跳转语句之break共3页.pdf.zip

    使用`break`语句需要注意的是,它会使程序的流程突然中断,可能导致预期外的结果。因此,合理地使用`break`可以提高代码的效率,但过度依赖它可能使代码变得难以理解和维护。在大多数情况下,优先考虑优化循环逻辑,...

    javascript循环弹出窗口

    在实际应用中,开发者需要考虑用户体验,避免过度使用或不恰当使用弹窗,因为它们可能打断用户的浏览体验,甚至被视为骚扰。在设计这类功能时,应确保有明确的控制机制,让用户能够轻松关闭或调整行为。

    Objective-C-2.0程序设计-第5章-循环结构(1).ppt

    在处理大型数据集或者计算复杂问题时,理解并恰当使用循环结构至关重要,因为它直接影响到程序的效率和准确性。 最后,良好的编程实践包括使用`@autoreleasepool`来管理内存,特别是在iOS和macOS开发中,这是...

    解决vue中的无限循环问题

    具体来说,无限循环问题可能是由于不当的响应式数据处理方式或是在Vue的生命周期钩子中不恰当的数据更新触发的。 ### 知识点一:无限循环产生的原因 无限循环通常是由于在Vue组件中,数据的更新触发了视图的重新...

    导致WiFi连接速度变慢的原因.docx

    例如,不恰当的频道选择、信道重叠或功率设置过高/过低都可能引起网络拥堵和速度减慢。 3. **空间干扰和多用户访问**:当多个设备共享同一无线信道时,信道的带宽会被分割,导致每个设备的传输速度降低。此外,物理...

    光猫QQ局域网传输文件慢

    然而,在使用过程中,可能会遇到一些性能上的问题,比如在局域网内通过QQ传输文件时速度过慢,这个问题可能会影响日常的工作效率和用户体验。下面我们将详细探讨这个问题的原因以及解决方案。 首先,当QQ局域网传...

    CommView / CommView for WiFi 汉化补丁

    值得注意的是,汉化补丁的使用需谨慎,因为不恰当的操作可能会导致软件运行异常。在安装和应用汉化补丁前,确保备份原有的软件设置和数据,以防万一出现问题可以恢复。此外,汉化补丁并非官方提供,可能存在兼容性...

    循环箭头PPT素材下载.rar

    总之,循环箭头PPT素材是设计专业且引人入胜的演示文稿不可或缺的一部分。通过恰当的运用,它们可以帮助传达复杂概念,提升观众对内容的理解,使你的演示更具影响力。因此,对于任何需要展示循环流程的场合,拥有...

    Java中while循环中break和contiune语句区别.pdf

    需要注意的是,`break`和`continue`都不能用在循环语句之外的任何其他语句中,它们只能在循环体内使用,包括`for`、`while`和`do-while`循环。此外,`break`和`continue`也可以在`switch`语句中使用,但这是另一个...

    黄色发光循环箭头.pptx

    通过以上内容可以看出,“黄色发光循环箭头”不仅仅是一种简单的图形设计元素,而是可以通过精心设计和合理应用提升整个演示文稿质量和吸引力的重要组成部分。无论是商业汇报还是教育讲座,恰当使用这样的图形都能够...

    while循环和一些笔记

    6. **效率考虑**:虽然循环是编程中的常用工具,但过度或不恰当的使用可能导致程序效率降低。合理设计循环结构,避免不必要的计算,有助于优化程序性能。 7. **条件判断的技巧**:在设置循环条件时,可以使用关系...

    ChatGPT技术如何避免生成不恰当的回复.docx

    ChatGPT 技术避免生成不恰当回复的方法和技巧 ChatGPT 技术是一种基于人工...通过筛查和处理训练数据、考虑上下文信息、引入用户参与和反馈机制,以及建立透明和负责任的环境,我们可以有效地避免生成不恰当的回复。

Global site tag (gtag.js) - Google Analytics