java - 检查 HashMap 键是否存在

标签 java hashmap micro-optimization containskey

在 Java 中,有一个 HashMap 完全填充了这种形式的数据:

HashMap<Integer, int[]> map = new HashMap<Integer, int[]>(1000000, 1);

检查随 secret 钥是否存在时速度更快,比如 100:

if (map.get(100) == null))

if (!map.containsKey(100))

?

从微观优化的角度来看,这个问题很有趣。

最佳答案

containsKey 应该非常轻微慢,因为它会导致额外的函数调用(它只调用 getEntry)(它可以得到优化离开,我不确定 Java 是否会这样做)。 containsKey 看起来像:

public boolean containsKey(Object key) {
  return getEntry(key) != null;
}

但请注意,另一方面,containsKey 在其他 Map 实现上可能会稍微更快(但可能不是标准 Java 中的那些实现API)。

通常我的实现看起来像:(避免需要 containsKey)

int[] arr = map.get(100);
if (arr == null) // doesn't exist
  // do stuff
else // exists
  // do stuff with arr

下面的肯定比上面的慢:(如果您要查找的项目在合理的时间内存在)

if (!map.containsKey(100)) // doesn't exist
  // do stuff
else // exists
{
  int[] arr = map.get(100);
  // do stuff with arr
}

编辑:感谢 zvzdhk 提供 containsKey 的源代码。我实际上应该检查一下。

关于java - 检查 HashMap 键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788434/

相关文章:

java - 无法弄清楚如何通过我的方法传递文件

assembly - 避免 AVX-SSE (VEX) 转换惩罚

java - 在调用另一个方法之前注入(inject)一个 Java 方法

java - 循环 HashMap 不返回正确的键

java - org.jdom.xpath.Xpath 不返回 UTF-8

c++ - 哈希表桶实现

c - 查找数字是偶数还是奇数的最快方法是什么?

java - 代码优化导致执行速度变慢 - 需要解释

java - 为什么我会收到有关 Java 实用程序类的警告

java - 通讯链路故障(MYSQL SERVER 8 + JAVA)