HashMap 中的键存在性检查

新手上路,请多包涵

是否总是需要检查 HashMap 中的键是否存在?

我有一个包含 1000 个条目的 HashMap,我正在考虑提高效率。如果访问 HashMap 的频率非常高,那么每次访问都检查 key 是否存在会导致很大的开销。相反,如果密钥不存在并因此发生异常,我可以捕获异常。 (当我知道这种情况很少发生时)。这会将对 HashMap 的访问减少一半。

这可能不是一个好的编程习惯,但它会帮助我减少访问次数。还是我在这里遗漏了什么?

[ 更新] 我在 HashMap 中没有空值。

原文由 athena 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 865
2 个回答

你曾经存储过空值吗?如果没有,你可以这样做:

 Foo value = map.get(key);
if (value != null) {
    ...
} else {
    // No such key
}

否则,如果返回空值,您 可以 检查是否存在:

 Foo value = map.get(key);
if (value != null) {
    ...
} else {
    // Key might be present...
    if (map.containsKey(key)) {
       // Okay, there's a key but the value is null
    } else {
       // Definitely no such key
    }
}

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 2.5 许可协议

通过检查密钥是否存在,您不会得到任何东西。这是 HashMap 的代码:

 @Override
public boolean containsKey(Object key) {
    Entry<K, V> m = getEntry(key);
    return m != null;
}

@Override
public V get(Object key) {
    Entry<K, V> m = getEntry(key);
    if (m != null) {
        return m.value;
    }
    return null;
}

只需检查 --- 的返回值是否与 null get() 不同。

这是 HashMap 的源代码。


资源 :

原文由 Colin Hebert 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题