在 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/