计算Java的nanotime';s containsKey手术

计算Java的nanotime';s containsKey手术,java,duration,nanotime,containskey,Java,Duration,Nanotime,Containskey,我试图编写一个代码,它以纳秒计算JavaMap的containsKey操作(比如它运行该操作的速度)。方法有一个映射D作为参数,返回的值应该包含Skey操作的正常使用时间(纳秒)。我真的不知道如何继续下去。Netbeans IDE给出了一条错误消息,表示这里有某种无限循环 以下是我目前的代码: import java.util.*; public class calculateNanotime implements calculateNanotime{ /* * Meas

我试图编写一个代码,它以纳秒计算JavaMap的containsKey操作(比如它运行该操作的速度)。方法有一个映射D作为参数,返回的值应该包含Skey操作的正常使用时间(纳秒)。我真的不知道如何继续下去。Netbeans IDE给出了一条错误消息,表示这里有某种无限循环

以下是我目前的代码:

import java.util.*;


public class calculateNanotime implements calculateNanotime{

   /* 
     * Measures Map's containsKey -operaation's time frequency as nanoseconds.
     * @param D Map to be tested
     * @return containsKey -operation's duration as nanoseconds
     */

    //@Override
    public long containsKeyTime(Map<Double, Double> D) {

        // I should try with different key values
        D.containsKey(1.0);
     
        long beginning = System.nanoTime();
        long end = System.nanoTime();
        
        long result = end - beginning;
    
 //I have a code in another class of this package, which will be testing how well this code work, after this is ready
        result = testable.containsKeyTime(D);
          return result;
}
}
import java.util.*;
公共类CalculateNoTime实现CalculateNoTime{
/* 
*测量地图的containsKey操作的时间频率为纳秒。
*@param D映射待测试
*@return containsKey-操作的持续时间为纳秒
*/
//@凌驾
公共长容器时间(地图D){
//我应该尝试使用不同的键值
D.containsKey(1.0);
长开始=System.nanoTime();
long end=System.nanoTime();
长期结果=结束-开始;
//我在这个包的另一个类中有一个代码,它将在准备好之后测试这个代码的工作情况
结果=可测试的包含时间(D);
返回结果;
}
}
以下是erroe消息: 线程“main”java.lang.StackOverflowerr中出现异常 CalculateNoTime.CalculateNoTime.containsKeyTime(CalculateNoTime.java:35)


在calculateNotime.calculateNotime.containsKeyTime(calculateNotime.java:42)

您的无限循环错误可能来自此

public class calculateNanotime implements calculateNanotime
其中有一个类实现了同名的接口


请参见

您没有无限循环,您拥有的是一个递归函数,没有终止的基本情况。您的containsKeyTime方法可能应该将要检查映射是否包含键的值作为参数。可能是这样的:

public class calculateNanotime implements calculateNanotime {    
    @Override
    public long containsKeyTime(Map<Double, Double> doubleMap, double value) {     
        long beginning = System.nanoTime();
        boolean result = doubleMap.containsKey(value); //what to do with result?
        return System.nanoTime() - beginning;
    }
}
公共类CalculateNotime实现CalculateNotime{
@凌驾
public long containsKeyTime(Map doubleMap,double value){
长开始=System.nanoTime();
布尔结果=doubleMap.containsKey(值);//如何处理结果?
返回系统.nanoTime()-开始;
}
}

什么是可测试的?如果您有错误消息,那么将其包含在您的帖子中是很有用的。首先,我将删除这一行:result=testable.containsKeyTime(D);其次,我将在两个System.nanoTime度量之间移动D.containsKey调用。另外,您试图做的是微基准测试。建议您阅读相关内容,因为这是一个更难解决的问题。您应该注意,Java中的微基准测试涉及一些可能导致误导结果的微妙之处,例如,您是否试图测量JIT编译器启动之前或之后所花费的时间?如果编译器检测到输出未被使用,它也可能完全省略该操作。JMH是编写此类基准的推荐工具:相关: