`
lw1130
  • 浏览: 21213 次
  • 性别: Icon_minigender_1
  • 来自: nanjing
社区版块
存档分类
最新评论

由for循环引发的思考

阅读更多
最近看到一篇帖子 讨论for循环问题,for循环如下
arr是一个数组
一种是
   for(int i = 0;i<arr.len;i++) { 
      A a = arr[i]; 
      System.out.println(a); 
     } 
另一种是
  A a = null; 
   for(int i = 0;i<arr.len;i++) { 
     a = arr[i]; 
    System.out.println(a); 
    }
对以上两种for循环的写法,讨论的很是激烈,看完讨论,觉得有位老兄说的比较准确,于是总结了下,有说错的地方,请指正,
第一种
  这样做的优点是 缩小了引用A的作用范围. 但是每次把一个对象引用赋值给一个变量,占用栈内存较多,因为对象始终被变量引用,不一定被列为被回收对象
第二种
  这样做的话 , 只声明了一次.但是在一些特殊情况下 比如所在的函数很长, 需要执行很多的时间. 那么,a变量将一直指向arr[arr.len-1],又恰好 arr[arr.len-1]在后来某操作而被弹出了arr数组.也就是从arr数组中被删除了.但是a还没有过期,所以即使GC在这段时间内工作了,这个对象也不会被回收. 这时前面循环的许多对象已经没有被变量引用,可以称之为废弃的,应该会优先被列为回收对象

由此 引发了我对for循环的比较:经过测试(百万)
对于for循环 我的建议是改成如下形式
      A a = null; 
   for(int i = arr.len-1;i>=0;i--) { 
     a = arr[i]; 
    System.out.println(a); 
    }
改成这种形式,效率是最高的,经过我的对三种for循环 正序,倒序,高级for比较效率从高到低为:倒序,正序,高级for;
   并且对于嵌套for我也进行了测试
如果要进行嵌套for那最好把循环少的for放在最外面,这样减少cpu对for循环的切换,效率提升很明显,大家可以自己测试下,基本都是相反情况的一半。希望自己的测试能给大家带来一点编程的启示吧。哈哈 趁这会有空赶紧写下来
分享到:
评论

相关推荐

    循环结构教学设计

    * [引入]倒计时程序演示,提出问题,引发学生的思考,关键是要给学生足够的思考时间 * [复习]请学生回答问题,在 VB 中用什么控件的什么属性来显示倒计时出现的数字?通过复习唤醒学生脑中的“旧知识” 本节课的...

    JavaScript 数组循环引起的思考

    总结来说,JavaScript中的数组循环可以通过`while`或`for`结构实现,其中`i--`作为循环条件,利用JavaScript中非零值为 truthy,0 为 falsy 的特性来控制循环的终止。这种写法在某些情况下可以提供更简洁、高效的...

    浅议C语言中循环结构的教学方法.pdf

    for循环适用于已知循环次数的情况,while循环适用于循环次数不确定,根据条件判断来决定是否继续循环的情况,而do-while循环至少执行一次循环体内的代码,之后再根据条件判断决定是否继续执行。 在教学循环结构时,...

    第二章 第七节 循环结构的程序设计.doc

    - **导入新课**:通过趣味性的情景设置,如手动计算1至100的累加,引发学生对循环结构的好奇心,进而引入`for`循环的概念。 - **讲授新课**:采取学生自主探究与教师指导相结合的方式,通过分步解决学案中的问题,...

    由BatchSqlUpdate引发的思考-V1.4.doc

    通过分析慢日志文件和数据包,笔者发现使用 BatchSqlUpdate 批量操作时是一条一条语句的发送到 MySQL 服务器的,与使用 for 循环插入的方式一样。这个结果表明 BatchSqlUpdate 使用 JDBC 的批处理并没有起作用。 三...

    c++少儿编程专业教师使用资料

    - 思考如何使用for循环结合if语句处理序列问题。 - **3. 算法分析** - 分析如何利用循环和条件判断解决问题。 - **求解决** - **测试程序**:验证循环和条件判断的正确性。 - **程序解读**:解释循环和条件判断...

    For循环中分号隔开的3部分的执行顺序探讨

    引发这个问题思考的是一段js程序的运行结果: 代码如下: var i = 0; function a(){ for(i=0;i&lt;20;i++){ } } function b(){ for(i=0;i&lt;3;i++){ a(); } return i; } var Result = b(); 这段程序的运行结果是...

    像计算机科学家一样思考 c++.

    1. **基础概念**:C++的基础包括数据类型(如int、float、char)、变量、常量、运算符、流程控制(如if语句、for循环、while循环)以及函数的使用。这些是编程的基石,理解和熟练运用它们是学习C++的第一步。 2. **...

    礼献祖国——python绘图教学设计.pdf

    课程的核心在于学习Python中的for循环,以及如何使用双重循环构造复杂的图形。通过编程作图,学生能够了解编程在表达创意和情感方面的作用,同时也锻炼了他们的逻辑思维和动手能力。 **二、学生情况分析** 城镇中学...

    A new framework for managing IT-enabled

    面对当前复杂多变的市场环境和技术发展需求,企业迫切需要一种全新的管理框架来更好地应对由IS/IT引发的业务变革。 本研究始于1997年,在完成了一项为期三年的关于“通过IT实现效益管理”的研究之后启动。该研究将...

    《Python语言中turtle画图的综合应用》教学设计.pdf

    接着,教师让学生回顾Python语言中输入语句、输出语句、if语句、for语句的基本语法,并复习turtle模块中画图函数的基本用法。教学的重点是让学生将数学知识和计算机语言相结合,通过绘制国旗这一任务,体验数字化...

    2018-A PID Controller Approach for Stochastic Optimization of Deep Networks.zip

    在2018年的计算机视觉与模式识别(CVPR)会议上,一篇名为《A PID Controller Approach for Stochastic Optimization of Deep Networks》的论文引起了广泛关注。该论文提出了一种新颖的优化策略,即使用比例积分微分...

    c语言编程调试及挂起分析

    无限循环通常是由循环条件设置不当引起的。当循环条件始终为真时,程序就会陷入死循环。 **示例代码:** ```c int main(){ int a = 7; while(a ){ ++a; a /= 2; } return 0; } ``` **解决方案:** - 确认...

    一道经典的C面试题+答案.pdf

    这篇资料主要涵盖的是C语言和C++编程面试中的一些...思考题部分,Test函数会引发程序崩溃,原因在于GetMemory函数内申请的动态内存没有正确传递给Test函数外部的str,导致strcpy尝试在NULL指针上操作,引发未定义行为。

    2021-2022计算机二级等级考试试题及答案No.4761.docx

    13. for循环:for循环可以用于已知和未知循环次数的情况,先判断表达式,可以用break语句跳出循环,循环体中多条语句需用花括号括起。 14. 数据库系统:数据库系统减少了冗余,但并不能完全避免,一致性是指数据的...

    12306奇葩验证码引发思考之C#实现验证码程序

    最后,为了增加前景噪声点,使用`for`循环在图片上随机位置绘制小圆点,进一步提升验证码的复杂性。 整个验证码程序的核心在于随机性和复杂度的平衡。随机生成的字符串和图像噪声使得每一个验证码都是唯一的,而...

    I'm Master!我是老大插件for Discuz!7.0 NC V0.9 Beta.rar

    只不过是糅合会员评分,抽奖,权限提升、投票以及分离出的部分版主权限并加以改良的一个小小插件,但它代表的另一个角度的思考方式,并被赋予了颠覆传统模式的灵魂! 功能   符合积分条件的会员都和对...

Global site tag (gtag.js) - Google Analytics