日期:2014-05-20  浏览次数:20715 次

一个java性能方便的小问题
在写程序的时候有下面两种方法
Vector   a;

方法一:
for(int   i   ;   i <a.size();   i++){
      ……
}
方法二:
int   b   =   a.size();
for(int   i   ;   i <b;   i++){
      ……
}
谁能帮助分析下方法一与方法二的性能。自己感觉好象方法二更好一些。但是有时候写程序的时候,又用到了方法一,自己写了一个时间的测试   在100个情况下根本看不出什么,用时候方法二用的时间比方法一还多。

------解决方案--------------------
应该说是方法一的效率低些
因为方法一每次循环都要进行a.size()的计算

但是最终应该相差不了多少,循环的的话可能有点区别
------解决方案--------------------
如果你这个vector在for里面不会有变化(add/set/remove...),那么两个代码在本质上是一样的,只不过后者没有反复去执行同一段代码。100个是很难看出区别的,估计1000000个也只能看出10-100ms左右的差别
------解决方案--------------------
jf
------解决方案--------------------
这只有在超大量数据下才显得第二个方法效率,但从程序的可维护性上看。还是习惯用第二个好。
------解决方案--------------------
在一定数量级的范围内作性能测试,可能不容易看出其中一种的优势,也许测试性能的结果刚好相反。但是一旦大大超出这个数量级,其中一种的性能就会表现得比较明显出来。

根据需要吧!!!


------解决方案--------------------
有时候a.size()会变化的,在这种情况下用方法一很容易出错,所以个人认为还是方法二好些。
------解决方案--------------------
java中性能差不多,不过用javascript的话方法二性能会提高很多
------解决方案--------------------
看具体情况。
一般推荐用第二种。

但是有些情况,a.size()发生变化,而你又要重新去计算 a.size()的时候,还是用方法1

但是方法不推荐使用,可以用一些变通的方法来解决。毕竟方法1不安全。
------解决方案--------------------
同意shine333(enihs)
不过也可以搞成
Vector <Integer> a= new Vector <Integer> ();
//a.add(1);
for(Integer i:a){
...
}
连size也省了
------解决方案--------------------
这样写

for(int i,b=a.size(); i <b; i++){
……
}

------解决方案--------------------
java5.0的可以避开这个性能了。