为什么迭代NSArray要比通过NSSet迭代更快?

Ami*_*irZ 4 objective-c nsarray nsset fast-enumeration

我想知道为什么通过NSArray迭代比通过NSSet迭代更快?我想象它与NSArray的订购事实有关,而NSSet不是,但我是一个经过认证的答案,而不仅仅是猜测.

编辑:

我的问题是:为什么它更快,没有在该主题中解释.而不是它更快.

Ami*_*wad 8

第一:你不能说NSArray比这更快NSSet.当您从评论中的链接获得时,它取决于您正在做什么.NSSet到目前为止,在实例中搜索对象的速度更快.这就是,当你选择时,你想做什么NSSet.

集和数组之间有两个不同之处.

  • 数组必须保持顺序,设置不必.
  • 集合必须关注唯一性,数组不需要.

所以看起来很聪明,两者都有完全不同的实现.这可能导致不同的运行时行为.所以正确的问题是:惊喜在哪里?

显然,集合的额外条件比数组的额外条件更昂贵.

顺便说一句:NSSet实现对它所带来的独特性的承诺是不可能的.这是因为只有在将对象插入集合时才会检查唯一性.在插入对象后更改对象时,它可以变为等于集合中的另一个对象.

  • 不,这没有记录.只需在数组中使用两个可变字符串进行尝试即可.http://stackoverflow.com/questions/30535292/adding-strings-to-nsmutablesets (2认同)

Sco*_*Zhu 8

@Amin的答案在某些方面并不准确.

  1. 我们谈论的是迭代,而不是搜索.
  2. 在a中搜索Set当然比在a中搜索更快Array,因为第一次只需要O(1)时间,而第二次需要O(n)时间.
  3. 在我看来,NSArrayNSSet(迭代)更快,因为NSArray访问时间是精确的O(1),虽然NSSet也是O(1),但它是摊销的.
  4. 你甚至无法插入对象 NSSet

你能解释一下"显然,集合的额外条件比数组的额外条件更昂贵".