for循环的不同写法是否有性能性能差异?
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()方法 这样会不会稍微影响性能呢?
------解决方案--------------------这个写法对新版的jdk没啥性能影响,看一下ArrayList的原代码就明白了。
------解决方案--------------------一般当数据量小的时候看不出什么猫腻,也不在乎那点效率了。你可以弄大点试试
------解决方案--------------------应该没什么影响,list读出来的时候就知道大小了。放在缓存里!
------解决方案--------------------不考虑多线程并发的话,没区别
如果有额外线程也在操作这个list,比如做了remove操作,那么如果你提前把size的值取出来而不放在循环里每次都取,那么会报出
数组越界的异常,因为循环的时候,list的大小已经改变,但你没有每次重新取
------解决方案--------------------测试过循环次数百万以上速度才会有很小的变化,和可读性比,忽略不计