哈希映射中的密钥存在性检查
检查哈希映射中的密钥是否存在是否始终是必要的?
我有一个带有1000个条目的HashMap,我正在考虑提高效率。如果非常频繁地访问 HashMap,则在每次访问时检查密钥是否存在将导致很大的开销。相反,如果密钥不存在,因此发生异常,我可以捕获异常。(当我知道这种情况很少发生时)。这将使对HashMap的访问量减少一半。
这可能不是一个好的编程实践,但它将帮助我减少访问次数。还是我在这里错过了什么?
[更新]我在HashMap中没有空值。
检查哈希映射中的密钥是否存在是否始终是必要的?
我有一个带有1000个条目的HashMap,我正在考虑提高效率。如果非常频繁地访问 HashMap,则在每次访问时检查密钥是否存在将导致很大的开销。相反,如果密钥不存在,因此发生异常,我可以捕获异常。(当我知道这种情况很少发生时)。这将使对HashMap的访问量减少一半。
这可能不是一个好的编程实践,但它将帮助我减少访问次数。还是我在这里错过了什么?
[更新]我在HashMap中没有空值。
您是否曾经存储过空值?如果没有,你可以做:
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
}
}
通过检查密钥是否存在,您不会获得任何东西。这是以下代码: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;
}
只需检查 的返回值是否与 不同。get()
null
这是HashMap源代码。
资源: