【问题标题】:Collection Test with StopWatch使用秒表进行收集测试
【发布时间】:2016-11-28 11:28:06
【问题描述】:

我正在尝试测量包含 115 个项目的集合的经过时间。 我的问题是我只能在调试时测量经过的时间,并使用StopWatch.stop(); 准确设置断点 当我正常运行测试时,StopWatch.stop 的值是0,尽管它是一个长值。一开始我以为我的集合太少了,但是这个经过的时间应该作为长值传递。

//   times-collection will be initialised somewhere else
//---------------------------------------------------------------
for (int i=0; i<10; i++){
    final StopWatch stopwatchA = new StopWatch();
    final StopWatch stopwatchB = new StopWatch();
    Iterator<String> iterator = times.iterator();

    stopwatchA.start();
    while(iterator.hasNext()){
        if (iterator.next().equals("XXX")) {
            break;
        }
    }
    stopwatchA.stop();
    stopwatchB.start();
    for (String tzd : times) {

        if (tzd.equals("XXX")) {                
            break;
        }          
    }
    stopwatchB.stop();

    if(stopwatchA.getTime() < stopwatchB.getTime()){
        System.out.println("ITERATOR IS FASTER: iterator: " + estimatedTimeIterator + " FOR-TIME: " + estimatedTimeFor);
    }else if(stopwatchA.getTime() > stopwatchB.getTime()){
        System.out.println("FOR IS FASTER: iterator: " + estimatedTimeIterator + " FOR-TIME: " + estimatedTimeFor);
    }
}   

【问题讨论】:

标签: java collections stopwatch


【解决方案1】:

标准库中的秒表在内部使用 System.currentTimeMillis() 对于包含 115 个项目的集合,在 stopwatchA.start() 和 stopwatchA.stop() 之间完全有可能少于 1ms 请改用 System.nanoTime()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2013-04-07
    • 2019-12-17
    • 2015-12-28
    • 2020-05-26
    • 2018-01-02
    • 2021-02-03
    相关资源
    最近更新 更多