首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个个人感觉疑惑的效率有关问题

2013-07-11 
一个个人感觉疑惑的效率问题Java中假设存在一个2维数组byte[][] byteArrint i,nbyte a,dlong lsum请猜

一个个人感觉疑惑的效率问题
Java中假设存在一个2维数组
byte[][] byteArr;
int i,n;
byte a,d;
long lsum;

请猜下面2段代码效率哪个高?
代码1


                    a = byteArr[i][n];
                    
                    if(a > 0 && a < 10)
                        lsum += a;


代码2

                    a = byteArr[i][n];
                    d = (byte)(Math.abs(a - 5));

                    if(d < 5)
                        lsum += a;


以上在计算量超大的时候进行的测试。
如下测试代码

        Random rnd = new Random();
        long lsum = 0;
        byte[][] byteArr = new byte[2000][1000];
        for(int i = 0; i < 2000; i++)
        {
            for(int n = 0; n < 1000; n++)
            {
                byteArr[i][n] = (byte)(rnd.nextInt());
            }
        }
        byte a = 0;
        byte d = 0;
        long t11 = new Date().getTime();
        for(int t = 0; t < 2000; t++)
        {


            for(int i = 0; i < 1000; i++)
            {
                for(int n = 0; n < 1000; n++)
                {
                    a = byteArr[i][n];
                    
                    if(a > 0 && a < 10)
                        lsum += a;
                }
            }
        }
        long t12 = new Date().getTime();
        long t21 = new Date().getTime();
        for(int t = 0; t < 2000; t++)
        {
            for(int i = 0; i < 1000; i++)
            {
                for(int n = 0; n < 1000; n++)
                {
                    a = byteArr[i][n];
                    d = (byte)(Math.abs(a - 5));

                    if(d < 5)
                        lsum += a;
                }
            }


        }
        long t22 = new Date().getTime();

        System.out.println("t11 - t12: " + (t12 - t11));
        System.out.println("t21 - t22: " + (t22 - t21));




结果是第一段的执行时间几乎是第2段的2.5倍。

本人对Java底层了解不深,特此求解。 Java 测试 效率 二维数组
[解决办法]
为什么我的测试结果是大约5:8的时间?

热点排行