Sop*_*ner 9 java hashmap micro-optimization containskey
在Java中,让HashMap完全填充这种形式的数据:
HashMap<Integer, int[]> map = new HashMap<Integer, int[]>(1000000, 1);
Run Code Online (Sandbox Code Playgroud)
检查随机密钥是否存在时更快,比如说100:
if (map.get(100) == null))
Run Code Online (Sandbox Code Playgroud)
要么
if (!map.containsKey(100))
Run Code Online (Sandbox Code Playgroud)
?
从微观优化的角度来看问题很有意思.
Duk*_*ing 20
本containsKey应该是非常轻微的慢,因为它会导致额外的函数调用(它只是调用getEntry)(它可以得到优化,我不知道的Java是否会这么做).containsKey好像:
public boolean containsKey(Object key) {
return getEntry(key) != null;
}
Run Code Online (Sandbox Code Playgroud)
但请注意,containsKey另一方面,在其他实现上可能会稍微快一点Map(但可能不是标准Java API中的那些).
通常我的实现看起来像:(避免需要containsKey)
int[] arr = map.get(100);
if (arr == null) // doesn't exist
// do stuff
else // exists
// do stuff with arr
Run Code Online (Sandbox Code Playgroud)
下面肯定比上面慢:(如果您寻找的项目存在合理的时间)
if (!map.containsKey(100)) // doesn't exist
// do stuff
else // exists
{
int[] arr = map.get(100);
// do stuff with arr
}
Run Code Online (Sandbox Code Playgroud)
编辑:感谢zvzdhk提供的来源containsKey.我其实应该检查一下.
实际上两种方法都是一样的.如果查看java.util.HashMap源代码,可以找到下一个containsKey实现:
public boolean containsKey(Object key) {
return getEntry(key) != null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41966 次 |
| 最近记录: |