Java、C#速度大比拼

  一直想知道Java和C#到底哪个跑得更快一些,刚好最近写了一个f(n) = n的C#程序,于是顺手改成Java看看二者在速度上的差别。关于f(n) = n的题目请参看文章:f(n) = n的优化(二)

  一、Java和C#速度大比拼第一回合
    把f(n) = n的优化(二) 文章中的C#代码照搬不变的转换成Java代:
/*
 * Main.java
 *
 * Created on 2006年9月13日, 下午2:09
 *
 
*/


package test;

import javax.crypto.Mac;
import java.lang.*;

/**
 *
 * 
@author jailu
 
*/

public class Main {

    
/** Creates a new instance of Main */
    
public Main() {
    }


    
/**
     * 
@param args the command line arguments
     
*/

    
public static void main(String[] args) {
        
long start = System.currentTimeMillis();    //程序开始时间

        
int N = 0;  //自然数N
        boolean bl = true;
        
int intCount = 0;   //1的总个数
        int intTemp = 0;    //当前数字含有1的个数
        int a = 0,b = 0;

        System.out.println(
"满足条件f(n)=n的n值列表:");

        
//核心代码
        while(bl)
        
{
            
if (N % 10 == 1)
            
{
                intCount
++;
                intCount 
+= intTemp;
            }

            
else if (N % 10 == 0)
            
{
                intTemp 
= 0;    //统计1的个数

                b 
= N;
                
while (b > 0)
                
{
                    a 
= b % 10;
                    
if (a == 1)
                    
{
                        intTemp
++;
                    }

                    b 
= (b - a) / 10;
                }

                intCount 
+= intTemp;
            }

            
else if (N % 10 == 2)
            
{
                intCount 
+= intTemp;
                
if ((intCount >= N) && (intCount <= (N + 8)))
                
{
                }

                
else
                
{
                    N 
+= 7;
                    intCount 
+= (7 * intTemp);
                }

            }

            
else
            
{
                intCount 
+= intTemp;
            }


            
if (intCount == N)
            
{
                System.out.println(N 
+ "\t耗时\t" + (System.currentTimeMillis()
- start) + "ms");
            }


            
if (N >= 1111111111)
            
{
                bl 
= false;
                System.out.println(
"\n程序结束!");
                System.out.println(
"共耗时" + (System.currentTimeMillis() - star
t));
            }

            N 
++;
        }


//        System.out.println("\n程序结束!");
//        System.out.println("共耗时" + (System.currentTimeMillis() - start));
    }

}

部分结果如下:
535199986       耗时    35078ms
535199987       耗时    35078ms
535199988       耗时    35078ms
535199989       耗时    35078ms
535199990       耗时    35078ms
535200000       耗时    35078ms
535200001       耗时    35078ms
1111111110      耗时    74313ms

程序结束!
共耗时74313

  由此可见Java程序运行时间约为74s,而C#程序的运行速度约为80s,此回合Java胜出。

  二、Java和C#速度大比拼第二回合:同时修改Java和C#代码(while(N <= 1111111110)),下面列出Java代码,C#代码与之类似:

/*
 * Main.java
 *
 * Created on 2006年9月13日, 下午2:09
 *
 
*/


package test;

import javax.crypto.Mac;
import java.lang.*;

/**
 *
 * 
@author jailu
 
*/

public class Main {
    
    
/** Creates a new instance of Main */
    
public Main() {
    }

    
    
/**
     * 
@param args the command line arguments
     
*/

    
public static void main(String[] args) {
        
long start = System.currentTimeMillis();    //程序开始时间
        
        
int N = 0;  //自然数N
        int intCount = 0;   //1的总个数
        int intTemp = 0;    //当前数字含有1的个数
        int a = 0,b = 0;
        
        System.out.println(
"满足条件f(n)=n的n值列表:");
        
        
//核心代码
        while(N <= 1111111110)
        
{
            
if (N % 10 == 1)
            
{
                intCount
++;
                intCount 
+= intTemp;
            }

            
else if (N % 10 == 0)
            
{
                intTemp 
= 0;    //统计1的个数

                b 
= N;
                
while (b > 0)
                
{
                    a 
= b % 10;
                    
if (a == 1)
                    
{
                        intTemp
++;
                    }

                    b 
= (b - a) / 10;
                }

                intCount 
+= intTemp;
            }

            
else if (N % 10 == 2)
            
{
                intCount 
+= intTemp;
                
if ((intCount >= N) && (intCount <= (N + 8)))
                
{
                }

                
else
                
{
                    N 
+= 7;
                    intCount 
+= (7 * intTemp);
                }

            }

            
else
            
{
                intCount 
+= intTemp;
            }

        
            
if (intCount == N)
            
{
                System.out.println(N 
+ "\t耗时\t" + (System.currentTimeMillis() - start) + "ms");
            }


            N 
++;
        }

        
        System.out.println(
"\n程序结束!");
        System.out.println(
"共耗时" + (System.currentTimeMillis() - start));
    }

}

部分结果如下:
535199986       耗时    34828ms
535199987       耗时    34828ms
535199988       耗时    34828ms
535199989       耗时    34828ms
535199990       耗时    34828ms
535200000       耗时    34843ms
535200001       耗时    34843ms
1111111110      耗时    73656ms

程序结束!
共耗时73656

而C#程序的运行结果如下:
535199988
Total Time:     00:00:39.2187500

535199989
Total Time:     00:00:39.2187500

535199990
Total Time:     00:00:39.2187500

535200000
Total Time:     00:00:39.2187500

535200001
Total Time:     00:00:39.2187500

1111111110
Total Time:     00:01:23.1250000


Start Time:     2006-9-13 16:02:38
End Time:       2006-9-13 16:04:01
Total Time:     00:01:23.1250000
运行结束!

  由结果可以看出:
  1、第二回合中的Java程序比第一回合中的Java程序快了0.7s左右;
  2、第二回合中的C#程序非但没比第一回合中的C#程序快,反而慢了3s多,汗个,搞不懂是怎么回事,有兴趣的朋友可以自己试下!
  3、第二回合大比拼中,Java胜出!

  经此两回合的较量,不难发现:Java的运行速度略快于C#的运行速度!

posted @ 2006-09-13 16:11  Jailu  阅读(5911)  评论(4编辑  收藏  举报