NSSet的迭代顺序是怎样的?
我知道 NSSet 不保留顺序,我很好奇 iOS4/iOS5 sdks 中是如何实现迭代顺序的。你有什么想法吗?
I know that NSSet does not preserve order and I got curious about how the iteration order is implemented in iOS4/iOS5 sdks. Do you have any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短回答:
顺序是随机的。
长答案:
根据定义,未指定顺序。换句话说,这取决于实施。
在常见的实现中,每个对象都被转换为一个整数(哈希码),用于快速查找集合中的对象(索引哈希表),然后通过哈希码实现迭代顺序(哈希码基本上是一个数组)指数)。
请注意,如果两个对象具有相同的哈希码(但它们不相等),则它们的顺序仅取决于集合上的插入/删除操作的顺序。
由于常见的哈希表实现对不同的数据大小使用不同的哈希函数,因此当集合大小增加时,顺序可能会完全改变。
Short Answer:
The order is random.
Long Answer:
By definition, the order is not specified. In other words, it depends on the implementation.
In common implementations, every object is converted to an integer number (hash code) which is used to find the object in the set quickly (indexing hash table) and the iteration order is then implemented by hash codes (a hash code is basically an array index).
Note that if two objects have the same hash code (but they are not equal), their order depends only on the sequence of insert/delete operations on the set.
Since common hash table implementations use different hash functions for different data sizes, the order can change completely when set size is increased.