最近看到一篇帖子 讨论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中的数组循环可以通过`while`或`for`结构实现,其中`i--`作为循环条件,利用JavaScript中非零值为 truthy,0 为 falsy 的特性来控制循环的终止。这种写法在某些情况下可以提供更简洁、高效的...
for循环适用于已知循环次数的情况,while循环适用于循环次数不确定,根据条件判断来决定是否继续循环的情况,而do-while循环至少执行一次循环体内的代码,之后再根据条件判断决定是否继续执行。 在教学循环结构时,...
- **导入新课**:通过趣味性的情景设置,如手动计算1至100的累加,引发学生对循环结构的好奇心,进而引入`for`循环的概念。 - **讲授新课**:采取学生自主探究与教师指导相结合的方式,通过分步解决学案中的问题,...
通过分析慢日志文件和数据包,笔者发现使用 BatchSqlUpdate 批量操作时是一条一条语句的发送到 MySQL 服务器的,与使用 for 循环插入的方式一样。这个结果表明 BatchSqlUpdate 使用 JDBC 的批处理并没有起作用。 三...
- 思考如何使用for循环结合if语句处理序列问题。 - **3. 算法分析** - 分析如何利用循环和条件判断解决问题。 - **求解决** - **测试程序**:验证循环和条件判断的正确性。 - **程序解读**:解释循环和条件判断...
引发这个问题思考的是一段js程序的运行结果: 代码如下: var i = 0; function a(){ for(i=0;i<20;i++){ } } function b(){ for(i=0;i<3;i++){ a(); } return i; } var Result = b(); 这段程序的运行结果是...
1. **基础概念**:C++的基础包括数据类型(如int、float、char)、变量、常量、运算符、流程控制(如if语句、for循环、while循环)以及函数的使用。这些是编程的基石,理解和熟练运用它们是学习C++的第一步。 2. **...
课程的核心在于学习Python中的for循环,以及如何使用双重循环构造复杂的图形。通过编程作图,学生能够了解编程在表达创意和情感方面的作用,同时也锻炼了他们的逻辑思维和动手能力。 **二、学生情况分析** 城镇中学...
面对当前复杂多变的市场环境和技术发展需求,企业迫切需要一种全新的管理框架来更好地应对由IS/IT引发的业务变革。 本研究始于1997年,在完成了一项为期三年的关于“通过IT实现效益管理”的研究之后启动。该研究将...
接着,教师让学生回顾Python语言中输入语句、输出语句、if语句、for语句的基本语法,并复习turtle模块中画图函数的基本用法。教学的重点是让学生将数学知识和计算机语言相结合,通过绘制国旗这一任务,体验数字化...
在2018年的计算机视觉与模式识别(CVPR)会议上,一篇名为《A PID Controller Approach for Stochastic Optimization of Deep Networks》的论文引起了广泛关注。该论文提出了一种新颖的优化策略,即使用比例积分微分...
无限循环通常是由循环条件设置不当引起的。当循环条件始终为真时,程序就会陷入死循环。 **示例代码:** ```c int main(){ int a = 7; while(a ){ ++a; a /= 2; } return 0; } ``` **解决方案:** - 确认...
这篇资料主要涵盖的是C语言和C++编程面试中的一些...思考题部分,Test函数会引发程序崩溃,原因在于GetMemory函数内申请的动态内存没有正确传递给Test函数外部的str,导致strcpy尝试在NULL指针上操作,引发未定义行为。
13. for循环:for循环可以用于已知和未知循环次数的情况,先判断表达式,可以用break语句跳出循环,循环体中多条语句需用花括号括起。 14. 数据库系统:数据库系统减少了冗余,但并不能完全避免,一致性是指数据的...
最后,为了增加前景噪声点,使用`for`循环在图片上随机位置绘制小圆点,进一步提升验证码的复杂性。 整个验证码程序的核心在于随机性和复杂度的平衡。随机生成的字符串和图像噪声使得每一个验证码都是唯一的,而...
只不过是糅合会员评分,抽奖,权限提升、投票以及分离出的部分版主权限并加以改良的一个小小插件,但它代表的另一个角度的思考方式,并被赋予了颠覆传统模式的灵魂! 功能 符合积分条件的会员都和对...