cocoa - 检查NSDictionary是否包含特定键的哪种方法更快?




performance (2)

在考虑这样的性能问题时,请记住,Foundation数据类会根据您存储的对象数量来交换其基础数据结构。 例如,我认为一个小的NSArray实际上使用哈希表进行存储,直到它达到一定的大小。

我可以通过两种方式测试NSDictionary中是否存在密钥:

BOOL containsKey = [[dictionary allKeys] containsObject:foo];

BOOL containsKey = ([dictionary objectForKey:foo] != nil);

哪种方法更快,为什么?


我不知道如何要求allKeys数组可能更快,否则NSDictionary至少会在内部执行相同的操作。

编辑:我想你可以构造一个案例,其中allKeys方法会更快 - 通过在你的密钥的hash方法中花费很长时间,但不是在你的isEqual:方法中。 而且你也可以交换一个疯狂的NSDictionary实现,它们也是交换的(因为NSDictionary是抽象的。)





nsdictionary