我正在写一个单词计数程序(非常基本)并尝试找到它 执行时间处理时间 。奇怪的是,有时它会显示出来
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
答案 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.