ArrayList<String> arr = new ArrayList<String>();
// add elements into arr
for (int i = 0; i < arr.size(); i++) {
// opt
}
//and
for (int i = 0, len = arr.size(); i < len; i++) {
// opt
}
这两种for的写法是否真的有性能差异呢?
按理说上边的写法会在每次循环都调用arr.size()方法 这样会不会稍微影响性能呢?性能优化Java

解决方案 »

  1.   

    这个写法对新版的jdk没啥性能影响,看一下ArrayList的原代码就明白了。
      

  2.   


    你可以把 arr.size()放在循序外嘛
    int size =  arr.size();
    for(int i = 0 ; i < size ;i++){
    ...
    }
    这样可读性还稍微好些!
      

  3.   

    应该没什么影响,list读出来的时候就知道大小了。放在缓存里!
      

  4.   

    不考虑多线程并发的话,没区别
    如果有额外线程也在操作这个list,比如做了remove操作,那么如果你提前把size的值取出来而不放在循环里每次都取,那么会报出数组越界的异常,因为循环的时候,list的大小已经改变,但你没有每次重新取
      

  5.   

    如果size大小不变的话没影响,改变的话就会影响循环次数吧
      

  6.   

    是不是第一个for的话,每次判断都会进行size计算,增加时间。
    第二种,size直接赋值后就直接判断,不用计算呢