第一个循环比较常见,大家基本上也都这么用。但是每一次i<strList.size(),都需要做一次判断,非常消耗时间,每一次i++,都需要消耗CPU的计算能力。当数据量达到一百万以上的时候,此时这个循环就容易出现内存溢出,程序崩溃(当然,一般的程序基本上都不会有那么大的数据量)。
建议这样改进
int len=strList.size()
int i=0
for(i<leni++){
}
当声明一个临时变量存储demo.length时,这时消耗的时间将少得多。
那么我们要做的就是把要做的事情开多线程里去处理,可以简单的实现如下
package com.wenxy.test.baidu.zhidao.bankimport java.util.Iterator
import java.util.concurrent.Executor
import java.util.concurrent.Executors
public class TestLoop {
public static int i = 0
void doSomething() {
System.out.println(Thread.currentThread().getName()
+ " is doing。。。 and i = " + i)
i++
}
public static void main(String[] args) {
final TestLoop testLoop = new TestLoop()
// 创建一个线程池,用10个线程处理
Executor executor = Executors.newFixedThreadPool(10)
for (int i = 0 i < 100 i++) {
executor.execute(new Runnable() {
@Override
public void run() {
testLoop.doSomething()
}
})
}
}
}
每次循环都执行一遍list.size(),即使size函数里面声明都不做,仅return s开销也比写上一个变量len要大。如果size函数还要计算统计元素数量。开销更大改写成i<len,每次循环就只2个整型之间比较一次,开销最小