如何解决使用两个相似的代码块在HashMap中查找密钥的运行时差异显着
我使用HashMap.containsKey来检查HashMap中是否存在密钥,并在下面的代码中计算了持续时间:
public static void main(String[] args){
long startTime = System.nanoTime();
HashMap<String,Integer> map = new HashMap<>();
map.put("one",1);
map.put("two",2);
map.put("three",3);
if(map.containsKey("four")){
System.out.println("true");
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println(duration);
}
持续时间为:48278
我使用HashMap.containsKey来检查HashMap中是否不存在密钥,并在下面的代码中计算了持续时间:
public static void main(String[] args){
long startTime = System.nanoTime();
HashMap<String,3);
if(!(map.containsKey("four"))){
System.out.println("true");
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println(duration);
}
持续时间为:378741
因此,在第一个代码中,我检查地图中是否存在键“四个”,在第二个代码中,我检查地图中是否不存在键(请检查第七行)。 为什么第二个运行时这么长?他们基本上不是在做同一件事吗?
解决方法
在您的示例中,此差异是由使用System.out.println()引起的。这需要时间,应该是主要原因。
无论如何,您的测量方法不好。执行时间可能会不时变化很大。这是由于许多因素造成的,即JVM的JVM的JIT或CPU的CacheMisses。如果仅测量一次执行时间,则结果将不准确。如果执行代码 成千上万次,这些缺陷总计为零。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。