我想知道为什么迭代NSArray比通过NSSet迭代更快?我想象它与NSArray的订购事实有关,而NSSet不是,但我是一个经过认证的答案,而不仅仅是猜测。
编辑:
我的问题是:为什么它更快,而在该主题中没有解释。而不是如果它更快。
答案 0 :(得分:7)
首先:你不能说NSArray
比NSSet
更快。当您从评论中的链接获得时,它取决于您正在做什么。到目前为止,在NSSet
的实例中搜索对象的速度更快。当你选择NSSet
时,这就是你想要做的。
集和数组之间存在两个差异。
所以看起来很聪明,两者都有完全不同的实现。这可能导致不同的运行时行为。所以正确的问题是:惊喜在哪里?
显然,集合的额外条件比数组的额外条件更昂贵。
BTW:NSSet
的实例不可能实现它所带来的唯一性承诺。这是因为只有在将对象插入集合时才会检查唯一性。在插入对象后更改对象时,它可以变为等于集合中的另一个对象。
答案 1 :(得分:6)
@ Amin的答案在某些方面并不准确。
Set
中搜索当然比在Array
中搜索更快,因为第一次只需要 O(1)时间,而第二次需要 O(n)时间。NSArray
比NSSet
(迭代)更快,因为NSArray
的访问时间是精确的O(1),尽管NSSet
是O( 1)也是,但它是摊销的。NSSet
你能解释一下“显然,集合的额外条件比阵列的额外条件更贵。”