记得以前看书,有过这样一种说法:下面第二种写法的效率会高一些,因为不用检查数组越界的问题,
请各位看看,是否真有这么回事。
我记不清楚是Java还是C语言了。for (int i = 0; i < allInFile.length; i++)
for (int i = 0; i <= allInFile.length - 1; i++)第一个说出是哪本书里写的,给30分。
请各位看看,是否真有这么回事。
我记不清楚是Java还是C语言了。for (int i = 0; i < allInFile.length; i++)
for (int i = 0; i <= allInFile.length - 1; i++)第一个说出是哪本书里写的,给30分。
for (int i = 0; i <j ; i++)
这样性能会高不少,特别是循环次数多的时候,
你写的两种循环方式 , 没什么区别,循环次数是一样的,循环体自然也一样
第二个for循环结束后i的值是allInFile.length-1
第一个循环多一次判断
汗,不管是否给我们优化,首先都要保证自己代码的高效性吧
写习惯了自然而然
for(int i=0,len = allInFile.length;i<len;i++)
{
}那个< 和 <=貌似是数据库SQL优化中用到的....
上面体格for循环可能会出现数组越界的问题
只有当循环只有1次的时候第二种效率会高点但这也只是理论上的
这是最后的效率需要解决的地方,一般不必考虑
记得书里专门说过三楼的这种做法,强调这样做起不到取消异常检查的效果。
只有按照第二种写法,在循环体内碰到allInFile[i]时,就不会检查是否越界。
其他写法,每一次碰到allInFile[i],都会检查数组下标越界。
纠结于这个,只是想把这两种方法统一一下。
现在项目里,两种写法都有,虽然可以强制统一,
但还是有个理由比较好一些。
import java.util.ArrayList;
public class ForTest {
public static void main(String[] args) {
String[] s=new String[1000000];
long start=System.currentTimeMillis();
for(int i=0 ;i<s.length;i++){
s[i]=String.valueOf(i);
}
System.out.println(System.currentTimeMillis()-start);
String[] ss=new String[1000000];
start=System.currentTimeMillis();
for(int i=0 ;i<=ss.length-1;i++){
ss[i]=String.valueOf(i);
}
System.out.println(System.currentTimeMillis()-start);
}}
http://www.darkshire.net/jhkim/programming/java/optimization.html
再一种优化是
for(int i = 0,length = array.length; i < length; i++){} 这样的代码在java类库里比较常见。
确实,其实大多数的系统性能的瓶颈不可能出现在这样的技术细节上。楼主提出的两种写法造成的性能差别,如果是C甚至是汇编语言的系统可能需要考虑,而对于java软件开发来讲完全可以忽略。