为什么执行时间显示0毫秒(java程序)?

时间:2015-05-24 12:50:29

标签: java

  

我正在写一个单词计数程序(非常基本)并尝试找到它   执行时间处理时间 。奇怪的是,有时它会显示出来   0 milliseconds执行之前提供的相同输入后   15 milliseconds

     

此外,它有时显示16毫秒,有时显示15毫秒   相同输入的毫秒数。为什么会出现这种差异?可能是什么   可能的原因呢?

以下是该计划:

import java.util.*;


public class WordCount{

        public static void main(String [] args){

            Scanner scan=new Scanner(System.in);
            System.out.println("Enetr the Line of String");
            String words=scan.nextLine();
            long startTime = System.currentTimeMillis();

            wordCount(words);


            long endTime   = System.currentTimeMillis();
            long totalTime = endTime - startTime;
            System.out.println("\n TotalTime =  "+totalTime + " mills");

        }//main

        public static  void wordCount(String words){
            Integer c=0;
            String wor[]=words.split(" ");

            //System.out.println(""+Arrays.toString(wor));


            HashMap<String,Integer> hm=new HashMap<String,Integer>();
            for(String word: wor){
                // c=(Integer)hm.get(word);
                  c=hm.get(word);
                c=(c==null)?1:c+1;    //no c++
                hm.put(word,c);
            }

            Set keySet=hm.keySet();

            Iterator it=keySet.iterator();

            while(it.hasNext()){
                String key=(String)it.next();

                System.out.println(""+key+" = " + hm.get(key));
            }


        }//wordCount

 }//class
  

输出屏幕:

H:\Computer Science\Java>java WordCount
Enetr the Line of String
the is an the is an a is an the
the = 3
a = 1
is = 3
an = 3

 TotalTime =  15 mills

H:\Computer Science\Java>java WordCount
Enetr the Line of String
the is an the is an a is an the
the = 3
a = 1
is = 3
an = 3

 TotalTime =  16 mills

H:\Computer Science\Java>java WordCount
Enetr the Line of String
the is an the is an a is an the
the = 3
a = 1
is = 3
an = 3

 TotalTime =  0 mills

H:\Computer Science\Java>java WordCount
Enetr the Line of String
the is an the is an a is an the
the = 3
a = 1
is = 3
an = 3

 TotalTime =  0 mills

2 个答案:

答案 0 :(得分:1)

System.currentTimeMillis() JavaDoc中我们读到了方法:

  

以毫秒为单位返回当前时间。注意,虽然单位   返回值的时间是毫秒,的粒度   值取决于底层操作系统,可能更大。   例如,许多操作系统以数十为单位测量时间   毫秒。

对于Windows,此方法的解析时间超过1毫秒(在您的情况下约为16毫秒),这是更新计时器所需的最短时间。这意味着,当您拨打System.currentTimeMillis()两次时,您会得到两个完全相同的结果(解释为0)或两个结果,这些结果因您在操作系统上确定时间所需的时间而异。

考虑使用System.nanoTime()代替System.currentTimeMillis()。它可以产生更精确的结果。您可以在the Oracle blog阅读有关时间测量的更多信息,其中包含以下段落:

  

如果您对测量/计算经过时间感兴趣,那么   始终使用System.nanoTime()。在大多数系统上它会给出一个   分辨率为微秒级。请注意,这个电话   也可以在某些平台上执行微秒。

答案 1 :(得分:1)

程序的执行时间在计算上为0.在一个小句子中计算单词在毫秒范围内不需要时间。您有时可能会因为I / O(System.out),操作系统调度延迟,在您的系统上运行的其他程序或System.currentTimeInMillis()实施的限制而获得15ms或16ms。字数统计程序的实际工作时间应为0,取出I / O.