java 大量for循环如何优化

Python010

java 大量for循环如何优化,第1张

主要思想就是减少方法的压栈次数

最少的循环放到外面,最大的放到里面即可。

把循环次数少的放外面,多的放里面,因为越到外面,执行次数要越少,下面是具体代码,你看看

内大外小

for( int k=0k <10k++){

for(int j=0j <100j++){

for(int i=0i <1000i++){

function(i,j,k)

}

}

}

k <10k++执行10次

j <100j++ 执行10*100次

i <1000i++ 执行10*100*1000次

function(i,j,k)执行10*100*1000次

共执行语句数=(10+10*100+10*100*1000)*2+10*100*1000=3002020

内小外大

for( int k=0k <1000k++){

for(int j=0j <100j++){

for(int i=0i <10i++){

function(i,j,k)

}

}

}

k <1000k++执行1000次

j <100j++ 执行1000*100次

i <10i++ 执行10*100*1000次

function(i,j,k)执行10*100*1000次

共执行语句数=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000

所以执行效率应该是内大外小更高一些

内小外大-内大外小=3202000条语句-3002020条语句=199980条语句

那么我们要做的就是把要做的事情开多线程里去处理,可以简单的实现如下

package com.wenxy.test.baidu.zhidao.bank

import 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()

                }

            })

        }

    }

}