Referencing a previous answer to a question on SO,有一个名为TestForNull的方法。在我被告知可以提高效率之前,这是我的原始代码:
我的原始代码:
for (int i = 0; i < temp.length; i++) {
if (map.containsKey(temp[i]))
map.put(temp[i], map.get(temp[i]) + 1);
else
map.put(temp[i], 1);
在这个片段中,我正在对地图进行三次查找。我被告知这可以在一次查找中完成,所以我最终在SO上寻找答案并找到了链接的答案,并将我的代码修改为:
我的修改后的代码:
for (int i = 0; i < temp.length; i++) {
Integer value = map.get(temp[i]);
if (value != null)
map.put(temp[i], value + 1);
else
map.put(temp[i], 1);
}
即使它看起来更好,它看起来像两个看起来对我而不是一个。我想知道是否有一个只使用一个的实现,如果它可以在不使用第三方库的情况下完成。如果它有助于我为我的程序使用HashMap。
答案 0 :(得分:0)
第一个例子有3个地图调用的最坏情况(如果值已存在):
第二个例子总是有2个调用(和空检查):
所以你基本上用containsKey
进行空检查。
在HashMap
中,假设散列码分布良好(并且分布与HashMap
的大小一致),这些操作大致是恒定的时间。其他Map
实现(例如TreeMap
)具有log(n)执行时间。即使在HashMap
的情况下,空检查也会比containsKey
快,使第二个选项成为赢家。但是,除非您的哈希代码分布不均(或者这是您的应用程序正在执行的唯一操作)或执行效果不佳的等于检查,否则您不太可能产生可测量的差异。