我正在研究Core Foundation和CFDictionary,在Apple Documentation我发现了这个,
保证CFDictionary对象中值的访问时间 对于任何实现,最坏的是O(log N),但通常为O(1) (恒定时间)。插入或删除操作通常在 恒定时间,但在最坏的情况下是O(N * log N)。它是 通过密钥访问值比直接访问它更快。 字典往往比使用数组的内存使用更多的内存 相同数量的值
令我惊讶的是,在CFDictionary source,我找到了这个,
字典中值的访问时间保证为 任何实施,当前和未来的最差O(N),但会 通常是O(1)(恒定时间)。插入或删除操作将 通常也是恒定时间,但在最坏的情况下是O(N * N) 在一些实现中。通过密钥访问值更快 而不是直接访问值(如果有任何此类操作)。 字典往往比数组使用更多的内存 具有相同数量的值。
为什么会有这样的差异..?还是我在找错了地方?
编辑:在apple OpenSource Browser中,为什么有这么多文件夹似乎是不同版本的Core Foundation,是吗......?哪些是最新的/相关的?
答案 0 :(得分:0)
"在某些实施中"。由于您拥有源代码,因此可以轻松检查实施的最坏情况。对于最坏的情况,假设字典中的每个对象都返回哈希值0: - )
顺便说一句。当哈希表变满并完全重建时,最糟糕的情况就会发生。这就是为什么你在摊销时使用的原因,而不是在最糟糕的时候,除非单次插入的最差时间对你很重要。