循环在大多数项目中都会用到,如果循环次数很大,循环体内不好的代码对效率的影响就会被放大而变的突出。让我们看看下面的代码片:..

Vector vect = new Vector(1000);
...
for( inti=0; i
<vect.size(); i++){
 ...
}

  for循环部分改写成:

int size = vect.size();
for( int i=0; i
>size; i++){
 ...
}

  如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调用。

 
再看如下的代码片:..

for (int i = 0;i <100000;i++)
if (i%10 == 9) {
 ... // 每十次执行一次
}

  改写成也可以提高效率:..

for(inti =0,j =10; i<100000; i++,j--){
 if(j == 0){
  ... // 每十次执行一次
  j = 10;
 }
}


  所以,当有较大的循环时,应该检查循环内是否有效率不高的地方,寻找更优的方案加以改进。

       真实案例:

       某银行系统的综合查询功能优化:

       综合查询功能需要预先设置所要查询内容的机构,按照省、市、县划分,如果只选择一两个机构执行时间在2-5秒,当选择30多个省级机构时,需要将近2分钟,有时还会超时,如果全国县级机构全选,结果可想而知。

       经分析发现:选择机构时,需要到系统缓存查询用户权限,判断所选机构是否在在其权限范围内。

       系统原来的做法是:将所选机构放入 循环体1  ,再去查询读取用户拥有查询权限的机构,逐级迭代比较是否与所选机构相等。这样相当于选择多少机构,就要执行多少次查询用户权限的操作。

       优化方案1:将读取用户权限的操作 从 循环体1 抽出来,放入一个缓存对象,在循环体内,用此对象和所选机构进行比较。结果很明显,只做一次查询用户权限操作,速度自然快很多,选1000家机构,也可以保证在5秒内完成。

      方案2大家想想,可以从不同层面优化。