for(int i = 0i<arr.lengthi++)
for(int i = arr.length-1i>=0i--)
分析:
结论:通常来讲第2种用–的方法效率更高
原因如下:
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
第2种方法和0比较作为判读,很多cpu和0比较可以减少1个指令.
参考:
i– *** 作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i >0,可以直接通过Z标志判断出来。
i++ *** 作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i <n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
考虑使用情况的话:arr.length可能会变化, 所以有可能比较时每次都要从arr里面取length的值.是一个问题。
所以有:
1,for(int i = 0i<arr.lengthi++) 最耗时,
2,for(int i=0,len=list.size()i<leni++) 次之,
3, for(int i = arr.length-1i>=0i--) 最快
1,最耗时不需多言,
2与3 基本上差距在10%之内
总结:(针对上边三种方法)
如果arr.length需要变化则使用++,否则使用–。
至于把arr.length保存到静态变量,前一种情况下不可能,后一种情况下则没必要
(1)优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询,数据表中创建索引。(2)对程序中经常用到的数据生成缓存(如使用redis缓存数据等)。
(3)对mysql做主从复制,读写分离。从而提高mysq执行效率和查询速度。
(4)使用nginx做负载均衡。将访问压力平均分配到多态服务器。
从机器的硬件性能上讲,循环的效率高一些。递归涉及到的内存 *** 作肯定要比循环复杂,最主要的就是递归调用函数中的变量的压栈、出栈 *** 作,如果递归的层次太多肯定会导致内存溢出、系统崩溃。例如:计算 n !,如果 n 太大了的话,就不能够使用递归的方法来实现了。就必须将递归的方法修改为非递归方式,这个现在在数据结构教材上都会有讲解的。当然了,递归的最大好处就是:编写代码简单,程序可读性好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)