alf*_*att 32 performance cocoa nsdictionary
我可以通过两种方式测试NSDictionary中是否存在密钥:
BOOL containsKey = [[dictionary allKeys] containsObject:foo];
BOOL containsKey = ([dictionary objectForKey:foo] != nil);
Run Code Online (Sandbox Code Playgroud)
哪种方法更快,为什么?
Chu*_*uck 68
散列查找通常应该比遍历所有字典键更快,从它们创建一个数组(内存分配相对昂贵)然后搜索数组(由于数组未排序,它甚至不能进行二进制搜索) .
然而,为了科学,我制作了两个可执行文件,只执行每个样式100万次并计时.
使用allKeys:
real 0m4.185s
user 0m3.890s
sys 0m0.252s
Run Code Online (Sandbox Code Playgroud)
使用objectForKey:
real 0m0.396s
user 0m0.189s
sys 0m0.029s
Run Code Online (Sandbox Code Playgroud)
显然,各种因素都可以影响这个 - 字典的大小,缓存allKeys返回值等等.我不希望有一种情况,其中数组搜索比字典查找更快.
我不知道如何要求allKeys数组可能更快,否则NSDictionary至少会在内部执行相同的操作.
编辑:我想你可以构建一个案例,allKeys
方法会更快 - 例如,在你的密钥hash
方法中花费很长时间,而不是在你的isEqual:
方法中.你也可以交换一个疯狂的实现NSDictionary
,因为它们是交换的(因为它NSDictionary
是抽象的.)
归档时间: |
|
查看次数: |
18945 次 |
最近记录: |