Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我知道 NSSet 不保留顺序,我很好奇在 iOS4/iOS5 sdks 中迭代顺序是如何实现的。你有什么想法?
简短的回答: 顺序是随机的。
长答案: 根据定义,没有指定顺序。换句话说,它取决于实现。在常见的实现中,每个对象都被转换为一个整数(哈希码),用于快速找到集合中的对象(索引哈希表),然后通过哈希码实现迭代顺序(哈希码基本上是一个数组指数)。
请注意,如果两个对象具有相同的哈希码(但它们不相等),则它们的顺序仅取决于集合上插入/删除操作的顺序。
由于常见的哈希表实现对不同的数据大小使用不同的哈希函数,因此当集合大小增加时,顺序可能会完全改变。